ObserverPattern(观察者设计模式)

1.简介

简单的来说就是一对多模式(即消息发布订阅模式),一发生改变,多能够收到改变的消息。典型的应用就是消息队列Kafka, MQ等。

2.举个简单的小栗子

公众号平台和订阅该公众号的微信号,就是典型的观察者模式。公众号有消息推送,各个关注微信号的人都能收到消息,下面是模式代码。

3.代码实现

3.1 Subject.java可以理解为抽象公众号主题
public interface Subject {
    void attach(Observer observer);
    void detach(Observer observer);
    void notifyMsg();
}
3.2 Platform.java公众号平台
public class Platform implements Subject {
    private List observers = null;

    public Platform() {
        this.observers = new ArrayList<>();
    }

    @Override
    public void attach(Observer observer) {
        observers.add(observer);
    }

    @Override
    public void detach(Observer observer) {
        observers.remove(observer);
    }

    @Override
    public void notifyMsg() {
        observers.forEach(observer -> {
            observer.update("push msg.");
        });
    }
}
3.3 Observer.java观察者抽象接口
public interface Observer {
    void update(String msg);
}
3.4 WeiXinUser.java具体
public class WeiXinUser implements Observer {
    private String name;

    public WeiXinUser(String name) {
        this.name = name;
    }

    @Override
    public void update(String msg) {
        System.out.println("name:" + name + " MSG:" + msg);
    }
}

4.测试

public class ObserverPatternDemo {
    public static void main(String[] args) {
        Platform platform = new Platform();
        Observer tom = new WeiXinUser("tom");
        WeiXinUser jack = new WeiXinUser("jack");
        platform.attach(tom);
        platform.attach(jack);
        platform.notifyMsg();

        platform.detach(jack);
        platform.notifyMsg();
    }
}

result:
    name:tom MSG:push msg.
    name:jack MSG:push msg.
    name:tom MSG:push msg.

tom和jack开始都关注了公众号,所以都能接收到消息推送。后来jack取消了,那么只有tom能接收到推送了。

你可能感兴趣的:(ObserverPattern(观察者设计模式))