設計模式之觀察者模式

前提:主要四個類(抽象被觀察者(發佈者)、抽象觀察者(訂閱者)、具體被觀察者、具體觀察者)(ps:好久沒更新了,不知道更啥,先更着觀察者模式。。。)
 
用途:微信公衆號消息推送
 
1 抽象被觀察者接口:
public interface ObserverAble {
    public void registerObserver(Observer o);
    public void removeObserver(Observer o);
    public void notifyObserver();
}
 
2 抽象觀察者接口:
public interface Observer {
    public void update(String message);
}
 
3 具體被觀察者類:
public class WechatServer implements ObserverAble {
    private List<Observer> observerList;
    private String message;
 
    WechatServer() {
        observerList = new ArrayList<>();
    }
 
    @Override
    public void registerObserver(Observer o) {
        observerList.add(o);
    }
 
    @Override
    public void removeObserver(Observer o) {
        observerList.remove(o);
    }
 
    @Override
    public void notifyObserver() {
        //循環發送消息
        for (Observer observer : observerList) {
            //調用具體觀察者的更新方法
            observer.update(message);
        }
    }
 
    //wechat發送信息
    public void setMessage(String message) {
        //發送消息操作
        this.message = message;
        notifyObserver();
    }
}
 
4 具體觀察者類:
public class User implements Observer {
    private String name;
 
    User(String name) {
        this.name = name;
    }
 
    @Override
    public void update(String message) {
        System.out.println("具體觀察者 " + this.name + " 收到消息:" + message);
    }
}
 
5 使用:
public static void main(String[] args) {
    WechatServer observerAble = new WechatServer();
    Observer observer1 = new User("張三");
    Observer observer2 = new User("李四");
    Observer observer3 = new User("王五");
    observerAble.registerObserver(observer1);
    observerAble.registerObserver(observer2);
    observerAble.registerObserver(observer3);
    observerAble.setMessage("66666666");
}
輸出如下:
Image.png
 
 
 
 
 
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章