对于jdk实现的观察者模式:具体主体实现的不是一个接口,而是Observable类,此类有五个方法:addObserver(),deleteObserver(),notiyObservers(),setChanged().具体观察者实现的是Observer接口.由于观察者模式对于观察者从主体中取数据的方式有两种:一种是主体主动把所有数据推给观察者,一种是观察者自己从主体处拉出自己想要的数据.因此有notifyObservers()(拉)和notifyObservers(object arg)(推)两种方法.对应的update(Observable o,object arg).
设计原则:类应该对扩展开放,对修改关闭
三.装饰者模式(decorate)
定义:动态的将责任附加到对象上.若要扩展功能,装饰者提供了比继承更有弹性的替代方案.
理解:
- 什么时候使用装饰者模式:有一个基础的东西,需要向这个基础的东西中添加各种各样新的行为的时候应该使用装饰者模式.因为如果不用装饰者的话就要直接修改这个基础类,这不符合类应该对扩展开放,对修改关闭的原则.
- 装饰者模式应该如何使用:(1)首先有一个抽象基础类,多个抽象具体组件(这些组件都要继承抽象基础类),还要有一个抽象装饰类(也要继承抽象基础类),多个具体装饰类继承抽象装饰类.这样具体组件和抽象组件都是同一种类型.(2)实例化具体组件,需要加入哪个行为就要用哪个行为的装饰类来装饰具体组件.具体做法是这样的,在抽象装饰类中要有具体组件的引用(可以通过构造函数来实现具体组件的引用),由于装饰者类与具体组件都继承抽象基础类,因此他们的类型是想相同的,装饰后也都是相同的类型,可以依然当作一个抽象类类应用.
- 装饰者类的作用:就是动态的添加新功能(未完待续)