zoukankan      html  css  js  c++  java
  • 设计模式学习笔记——观察者模式

    观察者模式类图(截图来自《大话设计模式》ps:以生活中的故事来分析设计模式,使人不觉得枯燥无味,很赞的一本书!):

    代码结构图:

    Java版代码:

    import java.util.ArrayList;
    
    public class Observer {
        public static void main(String[] args) {
            Subject subject = new Secretary();
            AbstractObserver observer1 = new StockObserver("Marry", subject);
            AbstractObserver observer2 = new NBAObserver("Peter", subject);
    
            subject.attach(observer1);
            subject.attach(observer2);
    
            subject.setSbjectState("老板回来了");
            subject.inform();
        }
    
    }
    
    abstract class Subject {
        private String sbjectState;
        private ArrayList<AbstractObserver> observers = new ArrayList<>();
    
        public void attach(AbstractObserver observer) {
            observers.add(observer);
        }
    
        public void detach(AbstractObserver observer) {
            observers.remove(observer);
        }
    
        public String getSbjectState() {
            return sbjectState;
        }
    
        public void setSbjectState(String sbjectState) {
            this.sbjectState = sbjectState;
        }
    
        public void inform() {
            for (AbstractObserver o : observers) {
                o.update();
            }
        }
    }
    
    class Boss extends Subject {
    }
    
    class Secretary extends Subject {
    }
    
    abstract class AbstractObserver {
        private String name;
        private Subject sub;
    
        public AbstractObserver(String name, Subject sub) {
            this.setName(name);
            this.setSub(sub);
        }
    
        public abstract void update();
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public Subject getSub() {
            return sub;
        }
    
        public void setSub(Subject sub) {
            this.sub = sub;
        }
    }
    
    class StockObserver extends AbstractObserver {
        public StockObserver(String name, Subject sub) {
            super(name, sub);
        }
    
        public void update() {
            System.out.println(this.getSub().getSbjectState() + this.getName()
                    + "关闭股票行情,继续工作!");
        }
    }
    
    class NBAObserver extends AbstractObserver {
        public NBAObserver(String name, Subject sub) {
            super(name, sub);
        }
    
        @Override
        public void update() {
            System.out.println(this.getSub().getSbjectState() + this.getName()
                    + "关闭NBA直播,继续工作!");
        }
    }
  • 相关阅读:
    STL——increment/decrement/dereference操作符
    STL——静态常量整数成员在class内部直接初始化
    STL——临时对象的产生与运用
    C++中模板类使用友元模板函数
    模板编程中的技巧
    plsql 表数据中文显示乱码(配置环境变量)
    plsql 常用快捷键(自动替换)
    javascript 跳出(终止)forEach循环
    plsql 快捷键配置
    plsql oracle client没有正确安装(plsql连接远程数据库)
  • 原文地址:https://www.cnblogs.com/kcher90/p/2980848.html
Copyright © 2011-2022 走看看