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

    杨哥说观察者设计模式,通俗易懂,只要看图和例子即可。

    //通知者接口

    package guanchazhe_designmode;

    //抽象观察者

    public abstract  class Observer {

    protected String name;

        protected Subject sub;

        public Observer(String name, Subject sub)

        {

            this.name = name;

            this.sub = sub;

        }

        public abstract void Update();

    }

    //抽象观察者

    package guanchazhe_designmode;

    //抽象观察者

    public abstract  class Observer {

    protected String name;

        protected Subject sub;

        public Observer(String name, Subject sub)

        {

            this.name = name;

            this.sub = sub;

        }

        public abstract void Update();

    }

    两个被观察者对象

    class Secretary implements Subject

    {

        //同事列表

        private List<Observer> observers = new ArrayList<Observer>();

        private String action;//前台状态

        public List<Observer> getObservers() {

    return observers;

    }

    public void setObservers(List<Observer> observers) {

    this.observers = observers;

    }

    public String getAction() {

    return action;

    }

    public void setAction(String action) {

    this.action = action;

    }

    //增加

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

            }

                

        }

        @Override

    public String getSubjectState() {

    // TODO 自动生成的方法存根

    return getAction();

    }

        

       

    }

    class Boss implements Subject

    {

        //同事列表

    private List<Observer> observers = new ArrayList<Observer>();

        public List<Observer> getObservers() {

    return observers;

    }

    public void setObservers(List<Observer> observers) {

    this.observers = observers;

    }

    public String getAction() {

    return action;

    }

    public void setAction(String action) {

    this.action = action;

    }

    private String action;//老板状态

        //增加

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

             }

                 

        }

    @Override

    public String getSubjectState() {

    // TODO 自动生成的方法存根

    return getAction();

    }

        

    }

    观察者对象(也可以理解为订阅用户)

    //看股票的同事

    class StockObserver extends Observer

    {

        public StockObserver(String name, Subject sub)

           {

         super(name, sub);

        }

        public void Update()

        {

         System.out.println("关闭股票行情,继续工作!"+sub.getSubjectState()+""+name);

           

        }

    }

    //看NBA的同事

    class NBAObserver extends Observer

    {

        public NBAObserver(String name, Subject sub)

           

        {

         super(name, sub);

        }

        public  void Update()

        {

         System.out.println("关闭NBA直播,继续工作!!"+sub.getSubjectState()+""+name);

           

        }

    }

    //程序入口

    public static void main(String[] args) {

    // TODO 自动生成的方法存根

    Operation oper;

    oper=(new FactoryMian()).new OperationFactory().createOperate("+");

    oper.set_numberA(1);

    oper.set_numberB(2);

    double result=oper.getResult();

    System.out.print(result);

    }

    执行效果:

    观察者原理:

          关键对象是主题Subject和观察者Oberver,一个Subject可以有任意数目的依赖它的Observer,一旦Subject的状态发生了改变,所有的Observer都可以得到通知。Subject发出通知时并不需要知道是它的观察者,也就是说,具体的观察者是谁,它根本不需要知道。而任何一个具体的观察者不知道耶不需要知道其他观察者的存在。就这么简单,不用多说

           在Android开发中其实有好多的场景设计都使用了观察者模式,比如按钮事件事件的触发其实也用了这个设计模式,rxjava也是等等,所以啊,有事没事就多多用用观察者模式啊。

  • 相关阅读:
    springboot + rabbitmq 做智能家居,我也没想到会这么简单
    分享 10个我常逛的国外技术社区,真的受益匪浅!
    被迫重构代码,这次我干掉了 if-else
    过滤器 和 拦截器 6个区别,别再傻傻分不清了
    看了 100多份简历后,想给找工作的程序员几点建议
    不会看 Explain执行计划,劝你简历别写熟悉 SQL优化
    友情链接
    关于我
    10w行级别数据的Excel导入优化记录
    kafka 监控工具 eagle 的安装(内附高速下载地址)
  • 原文地址:https://www.cnblogs.com/xinanheishao/p/6971482.html
Copyright © 2011-2022 走看看