【设计模式】观察者模式

来源:互联网 发布:印度最新人口数据 编辑:程序博客网 时间:2024/06/06 06:32

使用频率:★★★★★

一、什么是观察者模式

一对多的关系,又叫发布-订阅模式,即一个对象的状态发生变化,所有依赖它的对象能够知道该变化并自动更新;

二、补充说明

一对多:发布者是一,订阅者是多;观察目标是一,观察者是多;状态变化者是一,得到变化通知者是多;

三、角色

抽象主题

具体主题

抽象观察者

具体观察者

四、例子,JAVA实现

发布者为ConcreteSubject对象,PlusObserver和SubObserver为观察者对象,接收到发布者的变化通知后分别做自增和自减操作,并打印结果;

抽象主题

复制代码
package com.pichen.dp.behavioralpattern.observer;import java.util.ArrayList;import java.util.List;public abstract class Subject {    private List<Observer> observers = new ArrayList<Observer>();        public void attach(Observer observer) {        observers.add(observer);    }        public void detach(Observer observer){        observers.remove(observer);    }    public void notifyAllObservers(double value) {        for (Observer observer : observers) {            observer.update(value);        }    }        public abstract void change(double value);}
复制代码

具体主题

复制代码
package com.pichen.dp.behavioralpattern.observer;public class ConcreteSubject extends Subject{    private double value;    /**     * @return the value     */    public double getValue() {        return value;    }    /**     * 〈一句话功能简述〉     * 〈功能详细描述〉     * @see com.pichen.dp.behavioralpattern.observer.Subject#change()     */    @Override    public void change(double value) {        this.value = value;        System.out.println("original value:" + value);        this.notifyAllObservers(value);    }    }
复制代码

抽象观察者

package com.pichen.dp.behavioralpattern.observer;public abstract class Observer {    public abstract void update(double value);}

具体观察者

复制代码
package com.pichen.dp.behavioralpattern.observer;public class PlusObserver extends Observer {    public PlusObserver(Subject subject) {        subject.attach(this);    }    @Override    public void update(double value) {        System.out.println("After plus: "+ (++value));    }}
复制代码
复制代码
package com.pichen.dp.behavioralpattern.observer;public class SubObserver extends Observer {    public SubObserver(Subject subject) {        subject.attach(this);    }    @Override    public void update(double value) {        System.out.println("After sub: "+ (--value));    }}
复制代码

调用示例

复制代码
package com.pichen.dp.behavioralpattern.observer;public class Main {    public static void main(String[] args) {        Subject subject = new ConcreteSubject();        new SubObserver(subject);        new PlusObserver(subject);        subject.change(3.0);        subject.change(10.2);    }}
复制代码

结果打印

original value:3.0After sub: 2.0After plus: 4.0original value:10.2After sub: 9.2After plus: 11.2

 


@author   风一样的码农
@blog_url http://www.cnblogs.com/chenpi/
分类: 设计模式
标签: DesignPattern, JAVA
好文要顶关注我 收藏该文
风一样的码农
关注 - 4
粉丝 - 223
+加关注
0
0
«上一篇:【设计模式】享元模式
»下一篇:【设计模式】迭代器模式
0 0