zoukankan      html  css  js  c++  java
  • 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);
       }
      }

     }
    }

  • 相关阅读:
    LeetCode (160) Intersection of Two Linked Lists
    cmake命令 安装、用法简介
    算法——回文解密,判断一个数组是否为回文
    发现一个好用的播放插件---ckplayer
    阿里云ESC上的Ubuntu图形界面的安装
    tomcat 启动本地项目,但是报错的是另一个项目错误导致的tomcat启动失败
    发现一个有趣的时间控件
    Comparator 排序优先级
    项目Exception,项目前面有红色的小叉×
    日常问题,JasperException
  • 原文地址:https://www.cnblogs.com/kuailewangzi1212/p/469303.html
Copyright © 2011-2022 走看看