zoukankan      html  css  js  c++  java
  • 观察者模式(Observer Pattern)

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

    下面举一个具体例子:

    两个观察者,BinaryObserver的update将setState传入的整数转换成二进制,OctaObserver则是转成八进制

    interface Subject {
        
       private List<Observer> observers;
    
        public void registerObserver(Observer o);
    
        public void removeObserver(Observer o);  
    
       public void notifyAllObservers();
    }
    public class ConcreteSubject implements Subject{
        
       private List<Observer> observers 
          = new ArrayList<Observer>();
       private int state;
    
       public int getState() {
          return state;
       }
    
       public void setState(int state) {
          this.state = state;
          notifyAllObservers();
       }
    
       public void registerObserver(Observer observer){
          observers.add(observer);        
       }
    
        public void removeObserver(Observer observer){
           int i = observers.indexOf(observer);
           if(i >= 0)
                  observers.remove(i);
        }
    
       public void notifyAllObservers(){
          for (Observer observer : observers) {
             observer.update();
          }
       }     
    }
    abstract Observer {
       public abstract void update();
    }
     
    public class BinaryObserver implements Observer{
      Subject subject;
       public BinaryObserver(Subject subject){
          this.subject = subject;
          this.subject.attach(this);
       }
    
       @Override
       public void update() {
          System.out.println( "Binary String: " 
          + Integer.toBinaryString( subject.getState() ) ); 
       }
    }
    public class OctalObserver implements Observer{
       Subject subject;
       public OctalObserver(Subject subject){
          this.subject = subject;
          this.subject.attach(this);
       }
    
       @Override
       public void update() {
         System.out.println( "Octal String: " 
         + Integer.toOctalString( subject.getState() ) ); 
       }
    }

    测试代码:

    Subject subject = new ConcreteSubject();
    Observer o = new OctalObserver(subject);
    Observer b = new BinaryObserver(subject);
    
    subject.registerObserver(o);
    subject.registerObserver(b); subject.setState(
    15); subject.setState(10);

    在Swing中有使用到观察者模式,比如JButton的addActionListener方法。

  • 相关阅读:
    根据svm将视频帧转换为img
    Mp4 to Img
    Python_02 基本数据类型、while循环
    Python_01 执行方式、解释器路径、编码、变量、条件语句
    数字货币,新时代货币革命的起点?
    企业区块链项目中需要避免的常见错误
    2021 年五大物联网 (IoT) 趋势
    揭开AI、机器学习和深度学习的神秘面纱
    物联网的安全性与法规的未来
    为什么分布式云是下一代云计算?Gartner分析师这样解释
  • 原文地址:https://www.cnblogs.com/13jhzeng/p/5548154.html
Copyright © 2011-2022 走看看