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);
       }
      }

     }
    }

  • 相关阅读:
    嵌入式移动数据库Oracle Lite
    一生至少应该看的60本书
    似水年华,如梦光阴
    MS SQL Server数据库中合并复制详解
    登录Windows Live Messenger失败,因为服务暂时不可用
    ASCII码表
    写在监考之后
    ASP.NET基本对象
    linux网络命令 vconfig ifconfig
    grep使用
  • 原文地址:https://www.cnblogs.com/kuailewangzi1212/p/469303.html
Copyright © 2011-2022 走看看