设计模式系列--观察者模式基本

来源:互联网 发布:oracle创建表的sql语句 编辑:程序博客网 时间:2024/06/14 22:52

观察者模式属于设计模式中的行为型模式,也叫发布-订阅模式,实际上是一种事件监听机制。
基本思想是:有观察者和被观察者两种角色,当被观察者的行为有变化的时候(方法被调用),观察者就能被通知到。想成为被观察者的观察者,需要在被观察者那里登记。

角色
Watcher(观察者接口)
ConWatcher(具体观察者)
Watched(被观察者接口)
ConWatched(具体被观察者)

代码

观察者抽象

public interface Watcher {    //被通知的方法    public void update();}

具体观察者

public class ConWatcher implements Watcher{    @Override    public void update() {        System.out.println(this+"被通知了");    }}

被观察抽象

public interface Watched {    public void attach(Watcher w);    public void detach(Watcher w);    public void notifyWatcher();}

具体被观察者

public class ConWatched implements Watched{    List<Watcher> list = new ArrayList<Watcher>();    /**     * 观察者需要在被观察者那里登记     */    @Override    public void attach(Watcher w) {        list.add(w);    }    @Override    public void detach(Watcher w) {        list.remove(w);    }    /**     * 通知所有观察者     */    @Override    public void notifyWatcher() {        for(Watcher w:list){            w.update();        }    }    /**     * 被观察的事件     */    public void change(){        this.notifyWatcher();    }}

测试

public class Client {    public static void main(String[] args) {        ConWatched zhangsan=new ConWatched();//被观察者        Watcher watcher1 = new ConWatcher();//观察者        Watcher watcher2 = new ConWatcher();        zhangsan.attach(watcher1);//到观察者那里登记        zhangsan.attach(watcher2);        zhangsan.change();//被观察者变化了    }}

运行结果:

com.pattern.Observe.one.ConWatcher@9945ce被通知了com.pattern.Observe.one.ConWatcher@b5dac4被通知了

由此可见,两个观察对象都被通知了

0 0
原创粉丝点击