1. 程式人生 > >設計模式——觀察者模式

設計模式——觀察者模式

param body 抽象 logs ring 依賴 ret rip system

- 什麽是觀察者模式

觀察者模式有叫做發布訂閱模式,是對象間一種一對多的依賴關系,是的每當一個對象改變狀態時,則所有依賴於他的對象都會得到通知並自動更新。這其中過程就好比訂閱微信公眾號,公眾號中若有新消息產生就會及時通知用戶並更新。

技術分享圖片

  • 抽象觀察者

    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)

設計模式——觀察者模式