java设计模式学习之观察者模式(一)

来源:互联网 发布:软件的三层架构 编辑:程序博客网 时间:2024/05/30 02:25

观察者模式定义了对象之间的一对多的依赖,当一个对象改变状态时,他的所有依赖者都会收到通知并且自动更新。

观察者提供了一种对象设计,让观察者和主题之间的松耦合。、

设计原则:

1.为了对象之间的松耦合设计而努力。

步骤:

1.目标对象的定义2.具体目标对象的定义3.观察者接口的定义4.观察者接口的具体实现
一种观察者模式实现的通用框架
package observer;import java.util.ArrayList;/** * 目标对象 */public class Subject {    //保存注册的观察者对象    private ArrayList<Observer> observers = new ArrayList<Observer>();    public void registerObserver(Observer o) {        observers.add(o);    }    public void removeObserver(Observer o) {        observers.remove(o);    }    //通知注册的观察者    protected void notifyObserver() {        for (Observer observer : observers) {            observer.update(this);        }    }}

package observer;public class ConcreateSubject extends Subject{    private String subjectState;    public String getSubjectState() {        return subjectState;    }    public void setSubjectState(String subjectState) {        this.subjectState = subjectState;        this.notifyObserver();    }}

package observer;/** * 所有的观察者都实现这个接口。主题在通知观察者时,就有了一个共同的接口  */public interface Observer {    public void update(Subject subject);}

package observer;public class ConcreateObserver implements Observer{    private String observerState;    /**     * 获取目标的状态同步到观察者状态     * */    @Override    public void update(Subject subject) {        observerState = ((ConcreateSubject)subject).getSubjectState();        System.out.println(this.toString());    }    @Override    public String toString() {        return "ConcreateObserver [observerState收到" + observerState + "]";    }}

测试代码及结果

package observer;public class test {    public static void main(String[] args) {        ConcreateSubject concreateSubject = new ConcreateSubject();        Observer observer = new ConcreateObserver();        concreateSubject.registerObserver(observer);        concreateSubject.setSubjectState("1");        concreateSubject.setSubjectState("3");    }}

ConcreateObserver [observerState收到1]
ConcreateObserver [observerState收到3]

0 0
原创粉丝点击