• Chapter 14 观察者模式


    观察者模式又叫做发布-订阅模式:定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。

    观察者模式所做的工作其实就是在解除耦合,让耦合的双方都依赖于抽象,而不是依赖于具体,从而使得各自的变化都不会影响另一边的变化。

    代码如下:

    package xiao;

    import java.util.ArrayList;
    import java.util.List;

    interface Subject{
        void Attach(Observer observer);
        void Detach(Observer observer);
        void Notify();
        String getSubjectState();
        void setSubjectState(String subjectState);
    }

    abstract class Observer{
        protected String name;
        protected Secretary sub;
        public abstract void update();
    }
    class Secretary implements Subject{
        private List<Observer> observers = new ArrayList<Observer>();
        private String subjectState;
        public void Attach(Observer observer){
            observers.add(observer);
        }
        public void Detach(Observer observer){
            observers.remove(observer);
        }
        public void Notify(){
            for(Observer o:observers){
                o.update();
            }
        }
        public String getSubjectState() {
            return subjectState;
        }
        @Override
        public void setSubjectState(String subjectState) {
            this.subjectState = subjectState;
            
        }
    }

    class StockObserver extends Observer
    {
        public StockObserver(String name,Secretary sub){
            this.name = name;
            this.sub = sub;
        }
        public void update(){
            System.out.println(sub.getSubjectState()+this.name+"关闭股票,继续工作");
        }
    }
    class NBAObserver extends Observer
    {
        public NBAObserver(String name,Secretary sub){
            this.name = name;
            this.sub = sub;
        }
        public void update(){
            System.out.println(sub.getSubjectState()+this.name+"关闭NBA,继续工作");
        }
    }

    public class abc {
        public static void main(String[] args) {
            Secretary tongzizhe = new Secretary();
            StockObserver tongshi1 = new StockObserver("mike", tongzizhe);
            NBAObserver tongshi2 = new NBAObserver("dave", tongzizhe);
            tongzizhe.Attach(tongshi2);
            tongzizhe.Attach(tongshi1);
            tongzizhe.setSubjectState("boss is coming ");
            tongzizhe.Notify();
        }
    }

  • 相关阅读:
    readonly const
    多线程的安全性
    【C++】operator运算符重载
    C++ 多态的实现及原理(转载)
    C语言宽字符处理函数对照表
    UTF8编码规则(转)
    PE文件结构(转)
    C语言中宏定义
    汇编语言移位指令
    数组指针应该结合二维数组多维数组来理解
  • 原文地址:https://www.cnblogs.com/tuifeideyouran/p/3742742.html
Copyright © 2020-2023  润新知