java设计模式之八:观察者模式

来源:互联网 发布:linux 安装redis 编辑:程序博客网 时间:2024/06/06 01:57

观察者模式作为设计模式之一:在各个项目中都有大量的引用,例如Listener。

观察者模式的关键是:被观察者产生了变化或者达到一定要求,就通知观察者。而不是观察者时刻去检查被观察者的状态。

举例一:天气变化,显示牌显示气温

天气:被观察者

显示牌:观察者。

气象站:客户端。

天气发生了变化,气象站作为客户端需要调用被观察者的提醒方法,提醒观察者。


举例二:Android鼠标点击按钮

被观察者:按钮

观察者:onClickListener

客户端:鼠标


举例三:spring启动,spring启动需要加载配置文件,会有n个ContextLoaderListener implments ServletContextListener

被观察者:spring配置文件

观察者:ContextLoaderListener

客户端:tomcat容器


类图:

观察者接口

interface  Observer{    void update(String message);}
观察者实现类:

class ConcreteObServer implements  Observer{    @Override    public void update(String message) {        System.out.println(message);    }}

被观察者接口:

interface BeObserver{    void addObserver(Observer observer);    void remObserver(Observer observer);    void notifyObserver(String message);}

被观察者实现类

class ConcreteBeObServer implements  BeObserver{    List<Observer> list=new ArrayList<>();              @Override    public void addObserver(Observer observer) {      //添加观察者的操作由客户端调用        list.add(observer);    }    @Override    public void remObserver(Observer observer) {        list.remove(observer);    }    @Override    public void notifyObserver(String msg) {          //遍历观察者集合,通知观察者        for(Observer observer:list)            observer.update("天气改变了,变成了 "+msg);    }}


客户端代码:

public static void main(String[] args) {        BeObserver beObserver = new ConcreteBeObServer();        Observer o1 = new ConcreteObServer();        Observer o2=new ConcreteObServer();        beObserver.addObserver(o1);        beObserver.addObserver(o2);        int now = 23; //当前温度为23        now++;//气温变化        beObserver.notifyObserver(now + "");    }

结果:

天气改变了,变成了 24天气改变了,变成了 24


原创粉丝点击