美文网首页
观察者模式

观察者模式

作者: bobcorbett | 来源:发表于2017-08-16 09:46 被阅读0次

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

    主方法

    /**
     * 观察者模式又可以称作为发布-订阅(Publish/Subscribe)模式
     */
    public class main {
        public static void main(String[] args) {
            Boss boss = new Boss();
            StockObserver stockObserver = new StockObserver("魏关姹", boss);
            NBAObserver nbaObserver = new NBAObserver("易管查", boss);
    
            boss.Attach(stockObserver);//股票者对BOSS添加观察
             boss.Attach(nbaObserver);//NBA球迷对BOSS添加观察
             boss.Detach(stockObserver);//股票者解除观察,解除订阅
    
             boss.setSubjectState("我胡汉三回来了");//被观察者状态改变,换成秘书更好理解一些
    
             boss.Notify();//通知到所有订阅的观察者
        }
    }
    

    抽象主题类

    /**
     * 主题或抽象通知者,他爸所有对观察者对象的引用保存在一个聚集中,
     */
    public interface Subject {
        void Attach(Observer observer);
        void Detach(Observer observer);
        void Notify();
        String getSubjectState();
        void setSubjectState(String value);
    }
    

    抽象观察者类

    /**
     * 观察者抽象父类
     */
    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();
    }
    

    主题类实现类,被观察者

    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * 被观察者实现类,也可以叫做具体主题或者具体通知者
     */
    public class Boss implements Subject {
        private List<Observer> observers = new ArrayList<Observer>();
        private String status;//主题的状态
    
        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 status;
        }
    
        public void setSubjectState(String value) {
            status = value;
        }
    }
    

    观察者1(也可以叫做订阅者)

    /**
     * 炒股的观察者
     */
    public class StockObserver extends Observer {
        public StockObserver(String name, Subject sub) {
            super(name, sub);
        }
    
        public void Update() {
            System.out.println("{" + sub.getSubjectState() + "}{" + name + "}关闭股票行情,继续工作!");
        }
    }
    

    观察者2

    /**
     * NBA观察者
     */
    public class NBAObserver extends Observer {
        public NBAObserver(String name, Subject sub) {
            super(name, sub);
        }
    
        public void Update() {
            System.out.println("{" + sub.getSubjectState() + "}{" + name + "}关闭NBA直播,继续工作!");
        }
    }
    

    相关文章

      网友评论

          本文标题:观察者模式

          本文链接:https://www.haomeiwen.com/subject/honbrxtx.html