Android设计模式——装饰模式(七大结构型)
1.装饰模式介绍
装饰模式(Decorator Pattern)也称为包装模式(Wrapper Pattern),是七大结构型设计模式之一。
装饰物也许各不相同但是装饰的对象本质是不变的,这就是装饰模式。
2.装饰的定义
动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比生成子类更为灵活。
3.装饰模式的使用场景
需要透明且动态地扩展类地功能时。
4.UML类图
![](https://img.haomeiwen.com/i14104226/b77bcdd415b0811c.png)
5.角色介绍
1.Component:抽象组件。
可以是一个接口或者抽象类,充当的是被装饰的原始对象。
2.ConcreteComponent:组件具体实现类。
该类是Component类的基本实现,也是我们装饰的具体对象。
3.Decorator:抽象装饰者
其职责是为了装饰我们的组件对象,其内部一定要有一个指向组件对象的引用,大多数情况下为抽象类,需要根据不同的装饰逻辑实现不同的具体子类。如果装饰逻辑单一,可以忽略该类直接作为具体的装饰者。
4.ConcreteDecorator:装饰者具体实现类
只是对抽象装饰者做出具体的实现。
6.模板
![](https://img.haomeiwen.com/i14104226/e33508931895ee90.png)
![](https://img.haomeiwen.com/i14104226/bc42cb68f5da76d2.png)
![](https://img.haomeiwen.com/i14104226/7ab2122e61a9ea5c.png)
![](https://img.haomeiwen.com/i14104226/d472d41a9fc86b93.png)
![](https://img.haomeiwen.com/i14104226/7d373066d2f07af7.png)
7.例子
![](https://img.haomeiwen.com/i14104226/c97082303df12bc3.png)
![](https://img.haomeiwen.com/i14104226/31a80b917ac5bf55.png)
![](https://img.haomeiwen.com/i14104226/fca290cb16e69f3e.png)
![](https://img.haomeiwen.com/i14104226/431eded2b9c4196f.png)
![](https://img.haomeiwen.com/i14104226/a249c145b8f264de.png)
![](https://img.haomeiwen.com/i14104226/18660fda71c3baa4.png)
例子分析
抽象组件是一个人,仅有一个穿衣服的抽象方法,该类是需要修饰的原始对象;组件有个具体实现类,就是只要个好看的人他就会穿着干净整洁;有一个抽象装饰者类,保持了一个对抽象组件Person类的引用,可以方便的调用具体被装饰对象中的方法,这也是为什么可以在不破坏原类层次结构的情况下为类增加一些功能,我们只需要在被装饰对象的相应方法前或后增加相应的功能逻辑即可。
8.快速理解和记忆
我们会在Activity里写几个方法,然后在onCreate方法中调用,新增方法的调用就类似装饰模式中装饰者的职责,只不过没有保持对组件类的引用。
9.总结
装饰模式和代理模式有点类似,有时甚至容易混淆,往往会将装饰看作代理。装饰模式是以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案;而代理模式则是给一个对象提供一个代理对象,并有代理对象来控制对原有对象的引用。装饰模式应该为所装饰的对象增强功能;代理模式对代理的代理对象施加控制,但不对对象本身的功能进行增强。