17.观察者模式

观察者模式(又被称为发布-订阅(Publish/Subscribe)模式,属于行为型模式的一种,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态变化时,会通知所有的观察者对象,使他们能够自动更新自己。

 

 

 

 

 

 观察者接口:实现更新方法

public interface Observer {
    public void update(String msg);
}

被观察者接口:需要在notify方法中调用观察者的update方法

public interface Subject {
    public void add(Observer observer);
    public void remove(Observer observer);
    public void notifyPeople(String string);
}

观察者实现类

public class QQUser implements Observer {
    private String name;
    public QQUser(String name) {
        this.name = name;
    }

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


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+msg);
    }
}

被观察者实现类

public class ConcreteSubject implements Subject {
    ArrayList<Observer> list=new ArrayList<>();
    @Override
    public void add(Observer observer) {
        list.add(observer);
    }

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

    @Override
    public void notifyPeople(String string) {
        for(Observer observer:list){
            observer.update(string);
        }
    }

    public static void main(String[] args) {
        QQUser user = new QQUser("小吴");
        WeiXinUser user1 = new WeiXinUser("小民");
        ConcreteSubject subject = new ConcreteSubject();
        subject.add(user);
        subject.add(user1);
        subject.notifyPeople("小葵花妈妈课堂开课了");

    }
}

使用场景
关联行为场景,需要注意的是,关联行为是可拆分的,而不是“组合”关系。
事件多级触发场景。
跨系统的消息交换场景,如消息队列、事件总线的处理机制。
优点
解除耦合,让耦合的双方都依赖于抽象,从而使得各自的变换都不会影响另一边的变换。

缺点
在应用观察者模式时需要考虑一下开发效率和运行效率的问题,程序中包括一个被观察者、多个观察者,开发、调试等内容会比较复杂,而且在Java中消息的通知一般是顺序执行,那么一个观察者卡顿,会影响整体的执行效率,在这种情况下,一般会采用异步实现。

posted @ 2021-07-28 19:13  一拳超人的逆袭  阅读(31)  评论(0编辑  收藏  举报