Java设计模式----观察者模式(Observer)
来源:互联网 发布:广州发货的淘宝卖家 编辑:程序博客网 时间:2024/04/29 13:27
1. 观察者模式:
观察者模式,也叫发布/订阅模式,定义如下:
定义对象之间的一种一对多的依赖关系,使得每当一个对象的状态改变时,多有依赖于它的对象都能及时得到通知并被自动更新
2. 观察者模式的相关角色介绍:
a、 抽象被观察者角色
定义被观察者必须实现的职责,它必须能够动态地添加和取消观察者,一般由抽象类构成。仅完成被观察者的职责:管理观察者并通知观察者
b、 具体被观察者角色
定义被观察者自己的业务逻辑,同时定义对那些事件发出通知
c、 抽象的观察者角色
观察者接收到消息之后进行update操作,即对收到的信息进行处理
d、 具体的观察者角色
每个观察者接收到消息之后处理的反应不同,每个观察者都有自己的处理逻辑
3. 观察者模式通用示例代码:
抽象被观察者类:
/** * 抽象主题角色类,也称为抽象主题被观察者 * @author zqkj001 * */public abstract class Subject { /** * 用来保存注册的注册的观察者对象 */private List<Observer> list=new ArrayList<Observer>();/** * 注册观察者对象到list * @param ob */public void attach(Observer ob){list.add(ob);System.out.println("attach an observer..");}/** * 删除观察者对象 * @param ob */public void detach(Observer ob){list.remove(ob);}/** * 通知所有注册的观察者对象 * @param newState */public void notifyObservers(String newState){for (Observer ob : list) { ob.update(newState);}}}具体被观察者类:
/** * 具体主题角色类/具体主题被观察者类 * @author zqkj001 * */public class ConcreteSubject extends Subject { private String state;public String getState() {return state;}public void change(String newState){this.state=newState;System.out.println("主题状态更改为:"+this.state);//状态发生改变,通知各个观察者super.notifyObservers(this.state);}}抽象观察者类
/** * 抽象观察者角色类 * @author zqkj001 * */public interface Observer { /** * 更新接口 * @param newState */public void update(String newState);}具体观察者类
/** * 具体观察者角色类 * @author zqkj001 * */public class ConcreteObserver implements Observer { private String observerState;@Overridepublic void update(String newState) {//更新观察者状态,使其与目标状态一致this.observerState=newState; System.out.println("状态为:"+this.observerState);}}测试类:
public class Client { public static void main(String[] args) {//创建主题对象(被观察者)ConcreteSubject subject=new ConcreteSubject();//创建观察者对象Observer observer=new ConcreteObserver();//将观察者绑定到主题对象(被观察者)上subject.attach(observer);//改变主题对象(被观察者)的状态 subject.change("a new State");}}
4. 示例代码对应的类图:
JDK中提供了:java.util.Observable实现类和java.util.Observer接口,上面的代码中的一个抽象被观察者类和观察者接口可以分别用这2个替换。
JDK调用示例:
public class ConcreteSubject1 extends Observable { public void operator(){super.setChanged();super.notifyObservers("改变了");}}
public class ConcreteObserver1 implements Observer {@Overridepublic void update(Observable ob, Object str) {System.out.println("观察者接收到状态:"+str); }}
public class Test { public static void main(String[] args) {ConcreteSubject1 ob=new ConcreteSubject1();Observer observer=new ConcreteObserver1();ob.addObserver(observer);ob.operator();}}
0 0
- Java设计模式----观察者模式(Observer)
- Java 设计模式-观察者模式(Observer)
- Java设计模式—观察者(Observer)
- Java 设计模式--观察者(Observer)
- 设计模式--观察者(Observer)
- 设计模式-观察者(Observer)
- 观察者设计模式(Observer)
- Observer(观察者)设计模式
- Java设计模式之Observer(观察者)模式
- Java设计模式之Observer 观察者模式
- Java设计模式-----Observer观察者模式
- Java设计模式—观察者模式(Observer)
- Java设计模式之Observer-观察者模式
- Java设计模式-----Observer观察者模式
- java设计模式:观察者模式(Observer)
- JAVA设计模式七--observer(观察者模式)
- java设计模式之观察者模式Observer
- JAVA设计模式—观察者模式(Observer)
- Android Universal Image Loader 源码分析
- ios一键新机 igrimace 平安易贷 uber 微信 陌陌
- iOS倒计时方法
- 简单的方式挖掘和利用soap的sql注入
- 个人对hashCode与equals的区别与联系简单理解
- Java设计模式----观察者模式(Observer)
- 凸包--HDU - 3285 Convex Hull of Lattice Points
- html/css标签学习,持续Mark——iframe与<input>新特性range
- 【视频】高德开发者公开课—如何使用IOS SDK进行开发
- 浅谈XML 解析技术(三) JDOM解析
- 淘宝动态配置diamond准备工作
- Cas Server 与Cas Client 的配置与部署
- iOS_ UIScrollview_无限循环
- Linux下FTP用户权限的更改