设计模式之观察者模式

xiaoxiao2021-02-28  115

设计模式之观察者模式

观察者对象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("厦门天气预报:今天多云,局部可能会有中雨,请做好下雨措施"); } }

结果:

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

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

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

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

转载请注明原文地址: https://www.6miu.com/read-26411.html

最新回复(0)