设计模式——观察者模式

        观察者模式就和发布订阅一样,当发布一条消息,所有的订阅者都能够及时的收到消息。实现方式就是发布方通过一个容器装纳所有的订阅者,当一有消息发布时,就遍历容器中的所有订阅者,更新消息即可。

//抽象观察者
public interface Observer {

    void update(String message);

}
//真实观察者
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);
    }

}
//抽象主题
public interface Subject {

    //增加订阅者
    void attach(Observer observer);

    //删除订阅者
    void detach(Observer observer);

    //通知订阅者更新消息
    void notify(String message);
}
//真实主体
public class SubscriptionSubject implements Subject {

    //储存订阅公众号的微信用户--观察者
    private  ArrayList weixinUserlist = new ArrayList();

    //增加订阅者
    @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);
        }
    }
}

 

public class Test {
    public static void main(String[] args) {
        SubscriptionSubject mSubscriptionSubject=new SubscriptionSubject();
        //创建微信用户
        WeixinUser user1=new WeixinUser("孙悟空");
        WeixinUser user2=new WeixinUser("猪悟能");
        WeixinUser user3=new WeixinUser("沙悟净");
        //订阅公众号
        mSubscriptionSubject.attach(user1);
        mSubscriptionSubject.attach(user2);
        mSubscriptionSubject.attach(user3);
        //公众号更新发出消息给订阅的微信用户
        mSubscriptionSubject.notify("文章更新了");
    }
}

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