• Observer pettern


    using System;
    using System.Collections;

    namespace Factory
    {
     /// <summary>
     /// 普通的正常做法
     /// </summary>
     /*
     public class ATM
     {
      BankAccount bankAccount;
      void process(int data)
      {
       bankAccount.Withdraw(data);
      }
     }
     public class BankAccount
     {
      Emailer emailer;//紧耦合
      Mobile mobile;//紧耦合

      public void Withdraw(int d)
      {
       //...
       emailer.SendEmail("email");
       mobile.Send("phone");
      }
     }
     public class Emailer
     {
      public void SendEmail(string to)
      {
       //...
      }
     }
     public class Mobile
     {
      public void Send(string phone)
      {
      }
     }
     */
     //--------------------------------------------------
    //observer pettern设计模式
    //--------------------------------------------------
     public class UserAccountArgs
     {
      public string moble;
      public string email;
      public UserAccountArgs()
      {
      }
     }
    ---------------------------------------------
    --IB
    ---------------------------------------------
     public interface IAccountObserver
     {
      void Update(UserAccountArgs args);
     }
    -------------
    --B1
    ------------
     public class Emailer:IAccountObserver
     {
      public void SendEmail(string to)
      {
       //...
      }

      public void Update(UserAccountArgs args)
      {
       string email=args.email;
       SendEmail(email);
      }
     }
    --------------
    --B2
    --------------
     public class Mobile:IAccountObserver
     {
      public void Send(string phone)
      {
      }
      public void Update(UserAccountArgs args)
      {
       string mobile=args.moble;
       Send(mobile);
      }
     }

    --------------------------------------------------------------------
    --A1
    ---------------------------------------------------------------------
     public class BankAccount:Subject
     {
      UserAccountArgs userAccount;
      
      
      public void Withdraw(int d)
      {
       userAccount=new UserAccountArgs();

       Notify(userAccount);
      }
     }

    --------------------------------------------------
    -把稳定的操作抽出来 IA
    --------------------------------------------------
     public abstract class Subject
     {
      ArrayList IAccountList=new ArrayList();
      public void Add(IAccountObserver Ia)
      {
       IAccountList.Add(Ia);
      }
      public void Remove(IAccountObserver Ia)
      {
       IAccountList.Remove(Ia);
      }
      public virtual void Notify(UserAccountArgs userAccount)
      {
       foreach(IAccountObserver Ia in IAccountList)
       {
        Ia.Update(userAccount);
       }
      }

     }
    }

  • 相关阅读:
    audiojs 音频插件使用教程
    JavaScrip 原生多文件上传及预览 兼容多浏览器
    node操作mongdb的常用函数示例
    D3基础---比例尺
    D3基础---简介和数据
    前端性能优化和规范
    CSS代码优化(转载)
    CSS基础知识---浮动,定位和盒模型
    CSS基础知识
    用户样式,作者样式和浏览器默认样式
  • 原文地址:https://www.cnblogs.com/kuailewangzi1212/p/469303.html
Copyright © 2020-2023  润新知