我眼中的设计模式(2)

来源:互联网 发布:学完c语言 编辑:程序博客网 时间:2024/06/04 18:36

继续学习设计模式
观察者模式
定义:定义了对象之间的一对多的依赖,这样一来,当一个对象改变时,它的所有的依赖者都会收到通知并自动更新。

这里写图片描述

/**  * 主题接口,所有的主题必须实现此接口  *   * @author zhy  *   */  public interface Subject  {      /**      * 注册一个观察着      *       * @param observer      */      public void registerObserver(Observer observer);      /**      * 移除一个观察者      *       * @param observer      */      public void removeObserver(Observer observer);      /**      * 通知所有的观察着      */      public void notifyObservers();  }  
/**  * @author zhy 所有的观察者需要实现此接口  */  public interface Observer  {      public void update(String msg);  }  
public class ObjectFor3D implements Subject  {      private List<Observer> observers = new ArrayList<Observer>();      /**      * 3D彩票的号码      */      private String msg;      @Override      public void registerObserver(Observer observer)      {          observers.add(observer);      }      @Override      public void removeObserver(Observer observer)      {          int index = observers.indexOf(observer);          if (index >= 0)          {              observers.remove(index);          }      }      @Override      public void notifyObservers()      {          for (Observer observer : observers)          {              observer.update(msg);          }      }      /**      * 主题更新消息      *       * @param msg      */      public void setMsg(String msg)      {          this.msg = msg;          notifyObservers();      }  }  
public class Observer1 implements Observer  {      private Subject subject;      public Observer1(Subject subject)      {          this.subject = subject;          subject.registerObserver(this);      }      @Override      public void update(String msg)      {          System.out.println("observer1 得到 3D 号码  -->" + msg + ", 我要记下来。");      }  }  
public class Observer2 implements Observer  {      private Subject subject ;       public Observer2(Subject subject)      {          this.subject = subject  ;          subject.registerObserver(this);      }      @Override      public void update(String msg)      {          System.out.println("observer2 得到 3D 号码 -->" + msg + "我要告诉舍友们。");      }  }  
public class Test  {      public static void main(String[] args)      {          //模拟一个3D的服务号          ObjectFor3D subjectFor3d = new ObjectFor3D();          //客户1          Observer observer1 = new Observer1(subjectFor3d);          Observer observer2 = new Observer2(subjectFor3d);          subjectFor3d.setMsg("20140420的3D号码是:127" );          subjectFor3d.setMsg("20140421的3D号码是:333" );      }  }  
0 0