什么叫松耦合
对象间可以交互,但是他们并不太清楚彼此的细节。这就是多态的魅力,出版者只需要知道订阅者实现了某个接口,就可以了,不用清楚这些对象具体是怎么实现这些接口的,即使有新的对象加入,只要它实现了这个接口,出版者就不用修改自己的代码。即使订阅者修改了自己的代码,并不会影响出版者,因为两者是松耦合的。只要他们之间遵守接口的约定,我们就可以自由的改变他们。
设计原则:为了交互对象间的松耦合设计而努力。
松耦合使对象间的依赖降到了最低,这样的oo系统可以应对变化,这就是有弹性的系统。基本就是利用多态和组合来实现松耦合。这个原则本质还是针对接口编程,不针对实现编程,多用组合,少用继承。
观察者模式
出版者和订阅者,可以随时加入订阅和取消订阅。一对多关系,当一方改变时,它的所有依赖都会收到通知并进行更新。
一种模式是推数据,被观察者调用观察者的update方法时,将更新的数据一股脑传进参数中。
一种模式是拉数据,被观察者调用观察者update方法时,将被观察者的引用传入参数,但不用传入更新的参数,让观察者去选择性的拉数据。
java.util.Observable
设计并不是特别好。
1、不是接口,而是类,而java是不能多重继承的,因此限制了observable的复用潜力。
2、因为setChanged是protected,所以你必须用继承,违背多用组合,少用继承。增强了耦合性
不过,进行通知之前,有一个setChanged方法,可以有更多的弹性进行通知敏锐度调控。
mvc设计模式的model端就用了观察者模式,用来通知视图的更改。
抽取变化的部分:观察者的实现和数量,因此观察者实现一个接口,并通过组合方式依赖于被观察者,不管观察者的细节如何不同,被观察者通过接口进行观察者的调用即可。