APP下载
报价宝  ›  科技  › 

Java技术干货分享:深入理解观察者模式原理与技术

报价宝 来源:baojiabao.com 发布时间:2019-07-30 17:48:00 09月11日更新
报价宝综合消息Java技术干货分享:深入理解观察者模式原理与技术

来源:程式设计技术精选

观察者模式(Observer Pattern)也叫做释出-订阅(Publish/Subscribe)模式、模型-检视(Model/View)模式。这个模式的一个最重要的作用就是解耦。也就是将被观察者和观察者进行解耦,使得他们之间的依赖性更小,甚至做到毫无依赖。

观察者模式的定义:该模式定义了物件之间的一对多依赖关系,Subject 物件是一,Observer 物件是多。当 Subject 物件的状态发生改变时,所有依赖于该 Subject 物件的 Observer 物件都会得到通知,并且自动更新。仔细分析定义,要精确理解观察者模式主要注意三点:

定义了物件间的一对多依赖关系。当 Subject 物件的状态发生改变时,所有依赖于该 Subject 物件的 Observer 物件都会得到通知。Observer 物件得到通知后,会自动更新,而不是被动。经过上面的分析,下面我用程式码简单实现上述逻辑。

1.首先需要定义一个观察者物件,内部含有data资料(getter、setter、构造方法、toString)。

public class Observer {

private String data;

public Observer(String data) {

this.data = data;

}

public String getData() {

return data;

}

public void setData(String data) {

this.data = data;

}

@Override

public String toString() {

return "Observer{" +

"data='" + data + ''' +

'}';

}

}

2.其次定义主题物件,主题物件内部提供观察者系结(register)的界面,并且可以更新(update)所系结的观察者物件。

public class Subject {

private List list = new ArrayList();

public void register(Observer observer){

list.add(observer);

}

public void update(){

list.forEach(observer -> {

observer.setData("new");

System.out.println(observer.toString());

});

}

}

3.最后就是main方法。

public static void main(String[] args) {

Subject subject = new Subject();

for (int i = 0; i Observer observer = new Observer("old");

subject.register(observer);

System.out.println(observer.toString());

}

System.out.println("update...");

subject.update();

}

控制台打印

Observer{data='old'}

Observer{data='old'}

Observer{data='old'}

update...

Observer{data='new'}

Observer{data='new'}

Observer{data='new'}

看到这里你也许会问:这就是观察者模式?这么简单?你莫不是在逗我?

是的,这就是观察者模式。我们从观察者模式的定义出发,抽取出关键的3点核心思想,对比程式码和三点思想,是不是完美一致?百度一下"观察者模式",实现逻辑大都是复杂高深,其实就核心的思想来说,上面的示例足够了,其它扩充套件要以具体的业务需求来决定。比如:

Subject 角色是应该定义成类?比如 内建的 java.util.Observable;还是应该定义成界面,以规避Java不支援多重继承的问题?应该在什么时候订阅主题(或者说注册观察者)?是例项化观察者物件的同时?还是由客户自主决定?是否应该实现取消订阅功能(或者说取消注册)?主题物件通知观察者时,是否携带讯息?换句话说,是“推”讯息?还是“拉”讯息?是否支援多执行绪?end:如果你觉得本文对你有帮助的话,记得关注点赞转发,你的支援就是我更新动力。

文章标签: 报价宝 降噪耳机价格 耳机价格 红米手机价格 华为手机价格 小米手机价格 电视机价格 笔记本电脑价格 笔记本价格 汽车价格 报价宝 汽车价格 电视机价格 小米手机价格 华为手机价格