装饰者模式的目的是在使用对象之前,增加被装饰者的行为。
所以这里有两点需要注意:
- 使用的还是原对象,所以装饰者必须拥有和原对象一样的接口,即继承自同一个父类,或者实现同一个接口;
- 既然要装饰原对象,那么就必须包含一个对原对象的引用,然后在调用原对象行为的前后加上对行为的装饰。
所以,装饰者模式及继承/实现了接口,又包含一个继承/实现了接口的对象。
继承/实现的目的是为了类型匹配,因为要引用的是一个原对象类型;
引用一个原对象的目的是为了获取行为, 在原行为的基础上增加自己的行为。
这里也间接的指出了使用组合还是使用继承的原则:当我们想要达到类型匹配时,使用继承;当我们为了复用行为时,使用组合
下面是截自 head first Design Pattern的装饰者模式的类图:
image.png
网友评论