zoukankan      html  css  js  c++  java
  • 观察者模式

    摘自 菜鸟教程

    观察者模式使用三个类 Subject、Observer 和 Client。Subject 对象带有绑定观察者到 Client 对象和从 Client 对象解绑观察者的方法。我们创建 Subject 类、Observer 抽象类和扩展了抽象类 Observer 的实体类。

    ObserverPatternDemo,我们的演示类使用 Subject 和实体类对象来演示观察者模式。

    步骤 1
    创建 Subject 类。
    Subject.java
    import java.util.ArrayList;
    import java.util.List;
    
    public class 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 attach(Observer observer){
          observers.add(observer);		
       }
    
       public void notifyAllObservers(){
          for (Observer observer : observers) {
             observer.update();
          }
       } 	
    }
    步骤 2
    创建 Observer 类。
    Observer.java
    public abstract class Observer {
       protected Subject subject;
       public abstract void update();
    }
    步骤 3
    创建实体观察者类。
    BinaryObserver.java
    public class BinaryObserver extends Observer{
    
       public BinaryObserver(Subject subject){
          this.subject = subject;
          this.subject.attach(this);
       }
    
       @Override
       public void update() {
          System.out.println( "Binary String: " 
          + Integer.toBinaryString( subject.getState() ) ); 
       }
    }
    OctalObserver.java
    public class OctalObserver extends Observer{
    
       public OctalObserver(Subject subject){
          this.subject = subject;
          this.subject.attach(this);
       }
    
       @Override
       public void update() {
         System.out.println( "Octal String: " 
         + Integer.toOctalString( subject.getState() ) ); 
       }
    }
    HexaObserver.java
    public class HexaObserver extends Observer{
    
       public HexaObserver(Subject subject){
          this.subject = subject;
          this.subject.attach(this);
       }
    
       @Override
       public void update() {
          System.out.println( "Hex String: " 
          + Integer.toHexString( subject.getState() ).toUpperCase() ); 
       }
    }
    步骤 4
    使用 Subject 和实体观察者对象。
    ObserverPatternDemo.java
    public class ObserverPatternDemo {
       public static void main(String[] args) {
          Subject subject = new Subject();
    
          new HexaObserver(subject);
          new OctalObserver(subject);
          new BinaryObserver(subject);
    
          System.out.println("First state change: 15");	
          subject.setState(15);
          System.out.println("Second state change: 10");	
          subject.setState(10);
       }
    }
    步骤 5
    验证输出。
    First state change: 15
    Hex String: F
    Octal String: 17
    Binary String: 1111
    Second state change: 10
    Hex String: A
    Octal String: 12
    Binary String: 1010
    

      

  • 相关阅读:
    SSH框架总结(框架分析+环境搭建+实例源码下载)(转)
    用PowerMockito来mock私有方法(转)
    Mockito简介(转)
    统治世界的十大算法
    ThreadLocal用法和实现原理(转)
    在Eclipse中使用JUnit4进行单元測试(0基础篇)
    libgdx, mouse 关节
    sprintf,你知道多少?
    北京簋街 美食全然攻略 + 簋街好吃的夜宵去处-----店铺介绍大全
    codeforces-148D-Bag of mice-概率DP
  • 原文地址:https://www.cnblogs.com/wonder2636/p/5545567.html
Copyright © 2011-2022 走看看