《Head first 设计模式 》 day two 观察者模式

设计的原则

1:把不变和变动的部分分开设计

2:面向接口编程,不面向实现编程

3:多用组合,少用继承

昨天晚上学习了观察者模式,观察者模式的定义:定义了一种一对多的依赖,当一个对象状态发生改变,所有依赖它的对象都会得到通知,并自动更新

文中用到的例子是气象站,很多气象网站或者是机场,客运中心,农场都对气象数据感兴趣,他们会依赖气象站发布的数据,那么频繁地访问气象站数据,不如让气象站通知机场,客运中心,农场。这样也可以预防突发的气象灾害,比如夏天的雷暴、龙卷风等突发天气。


JDK中有默认实现的观察者模式,Observable,和Observer两个对象,不过非常不推荐使用原生的观察者模式,因为默认的观察者是一个抽象类,需要使用集成,而不是我们推荐的接口实现,第二个原因是,JDK的被观察者通知观察者的顺序跟添加观察者的顺序无关,依赖添加顺序的需要特别注意。

观察者模式获取状态信息有两种方式,1:push。2:get

push方式会把状态对象主动传递给观察者,get方式观察者会主动调用被观察者的引用get自己关注的信息,不过容易让观察者过度暴露给观察者。


pubic interface Observable{
setChanged();
addListener(Listener listener);
removeListener(Listener listener);
fireListener();//get方式
fireListener(Obeject obj);//push方式
}

public interface Observer{
addListener();
update();//get方式
update(Object obj);//push方式
remove();
}

具体实现不在赘述,因为观察者模式大家都不陌生,Jframe中的控件大量使用了观察者模式,MVC开发模式中也大量使用了观察者模式。重要的还是我们开头说的三个开发原则。


猜你喜欢

转载自blog.csdn.net/David_lou/article/details/79201939
今日推荐