码迷,mamicode.com
首页 > 其他好文 > 详细

设计模式——观察者模式

时间:2018-03-31 19:31:52      阅读:130      评论:0      收藏:0      [点我收藏+]

标签:依赖   易拓   cloud   interface   用户名   改变   ret   缺点   状态   

- 什么是观察者模式

观察者模式有叫做发布订阅模式,是对象间一种一对多的依赖关系,是的每当一个对象改变状态时,则所有依赖于他的对象都会得到通知并自动更新。这其中过程就好比订阅微信公众号,公众号中若有新消息产生就会及时通知用户并更新。

技术分享图片

  • 抽象观察者

    public interface Observer {
    public void update(String message);
    }
  • 具体观察者(ConcrereObserver)

    public class WeixinUser implements Observer {
    // 微信用户名
    private String name;
    public WeixinUser(String name) {
        this.name = name;
    }
    @Override
    public void update(String message) {
        System.out.println(name + "-" + message);
    }
    }
  • 抽象被观察者(Subject)

    public interface Subject {
    /**
     * 增加订阅者
     * @param observer
     */
    public void attach(Observer observer);
    /**
     * 删除订阅者
     * @param observer
     */
    public void detach(Observer observer);
    /**
     * 通知订阅者更新消息
     */
    public void notify(String message);
    }
  • 具体被观察者(ConcreteSubject)

     public class SubscriptionSubject implements Subject {
    
    private List<Observer> weixinUserlist = new ArrayList<Observer>();
    
    @Override
    public void attach(Observer observer) {
        weixinUserlist.add(observer);
    }
    
    @Override
    public void detach(Observer observer) {
        weixinUserlist.remove(observer);
    }
    
    @Override
    public void notify(String message) {
        for (Observer observer : weixinUserlist) {
            observer.update(message);
        }
    }
    }

- 观察者模式优点与缺点

优点:
1.观察者与被观察者之间抽象耦合,易拓展
2.简历一套出发机制,单一职责

- 使用场景

1.时间多级触发(一对多)
2.信息交换跨系统场景(qmq)

设计模式——观察者模式

标签:依赖   易拓   cloud   interface   用户名   改变   ret   缺点   状态   

原文地址:https://www.cnblogs.com/boycelee/p/8683467.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!