• 设计模式学习笔记——观察者模式


    观察者模式类图(截图来自《大话设计模式》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直播,继续工作!");
        }
    }
  • 相关阅读:
    网络编程学习小结
    我的学习笔记_Windows_HOOK编程 2009-12-03 11:19
    void及void指针含义的深刻解析
    Android开发之自己定义TabHost文字及背景(源码分享)
    ActionBar自己定义改动无效解决方法
    一位Erlang程序猿的自白
    Xcode 5.1安装插件:规范凝视生成器VVDocumenter
    Socket程序中的Error#10054错误
    CSDN博客清理缓存
    ACM 位运算
  • 原文地址:https://www.cnblogs.com/kcher90/p/2980848.html
Copyright © 2020-2023  润新知