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

    主要作用:

    当对象间存在一对多的关系时,当一个对象状态变化时,通知依赖它的对象

    一、本质理解


     

     

    说明:

    所谓观察者模式是一个类的状态的变化,可以被其他类检测到,并作出相应的变化

    类图如下:

     

    类说明:定义一个抽象的方法,用于对被观察者的类的状态作出反应

    public abstract class Observer {
        protected Subject subject;
        public abstract void update();
    } 

    定义具体的类,实现抽象方法,并在构造方法中加到被通知的集合中

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

    定义观察者类,有以下属性,定义一个集合用于存放所有的观察者

    定义一个状态用于通知所有的观察者,被观察者的状态

    当被观察者的状态变化时,进行通知被观察者

    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){
            this.observers.add(observer);
        }
    
        public void notifyAllObservers(){
            for (Observer observer : observers) {
                observer.update();
            }
        }
    
    }

    示例:

    public class ObserverPatternDemo {
        public static void main(String[] args) {
            Subject subject = new Subject();
            new OctalObserver(subject);
            new BinaryObserver(subject);
    
            subject.setState(1);
        }
    } 

    输出结果:

    Octal String: 1
    Binary String: 1 

    所有的观察者收到被观察者的变化

  • 相关阅读:
    Java 连oracle 12C 起步
    powershell excel 导入 sqlserver
    移动端适配方案(上)
    ie7兼容问题
    node学习第三天(2)
    node学习第三天(1)
    HTMl5的sessionStorage和localStorage的一些区别
    html5+css3实战之-幽灵按钮
    node.js理论知识梳理
    node.js学习第二天
  • 原文地址:https://www.cnblogs.com/anyanpeng/p/15342315.html
Copyright © 2011-2022 走看看