设计模式之观察者模式

来源:互联网 发布:北京匡恩网络拖欠工资 编辑:程序博客网 时间:2024/06/15 09:18

设计模式之观察者模式

观察者对象Observer

目标对象Subject

观察者设计模式适用于用户订阅栏目,然后在每次发布新消息的时候自动给订阅用户发送消息。我这里拿天气预报做例子,天气作为目标对象市民作为观察者对象

每次在天气预报更新天气信息后,自动给订阅的市民推送天气预报

直接上代码

目标对象接口(Subject )

public interface Subject {    void attach(Observer o);    void remove(Observer o);    void notifyObservers(String subjectState);}

目标对象类(SubjectImpl )实现目标对象接口

import java.util.ArrayList;import java.util.List;public class SubjectImpl implements Subject {    private List<Observer> observerList=new ArrayList<Observer>();    private String subjectState;    @Override    public void attach(Observer o) {        observerList.add(o);    }    @Override    public void remove(Observer o) {            observerList.remove(o);    }    @Override    public void notifyObservers(String subjectState) {          System.out.println("目标对象发送消息:"+subjectState);        for (Observer o : observerList) {            o.update(subjectState);        }    }    public SubjectImpl() {        super();        }    public String getSubjectState() {        return subjectState;    }    public void setSubjectState(String subjectState) {        this.subjectState = subjectState;        notifyObservers(subjectState);    }   }

观察者对象接口(Observer)

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

观察者对象类(ObserverImpl )实现观察者对象接口

public class ObserverImpl implements Observer {    private String name;    private String observerState;    @Override    public void update(String subjectState) {        setObserverState(subjectState);     }    public ObserverImpl() {        super();            }       public ObserverImpl(String name) {        super();        this.name = name;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getObserverState() {        return observerState;    }    public void setObserverState(String observerState) {        this.observerState = observerState;             System.out.println("观察者对象"+name+"接收到了:"+observerState);    }   }

测试观察者模式

public class TestObserverPattern {    public static void main(String[] args) {            ObserverImpl observer=new ObserverImpl("林飞凤");        ObserverImpl observer2=new ObserverImpl("涂志海");        SubjectImpl subject=new SubjectImpl();        subject.attach(observer);        subject.attach(observer2);        subject.setSubjectState("厦门天气预报:今天多云,局部可能会有中雨,请做好下雨措施");    }}

结果:

目标对象发送消息:厦门天气预报:今天多云,局部可能会有中雨,请做好下雨措施

观察者对象林飞凤接收到了:厦门天气预报:今天多云,局部可能会有中雨,请做好下雨措施

观察者对象涂志海接收到了:厦门天气预报:今天多云,局部可能会有中雨,请做好下雨措施

自己的一点点理解,如有不对,欢迎指正。

原创粉丝点击