Android设计模式-20-装饰模式

1. 定义

也叫包装模式

动态的给一个对象添加一下额外的职责,就增加功能来说,装饰模式相比生成子类更为灵活

使用一种对客户端透明的方式来动态的扩展对象的功能,也是继承关系的一种替代方案

与代理模式的区别:装饰模式是为所装饰的对象增强功能;代理模式则是对代理的对象施加控制,但不对对象本身的功能进行增强;

2. 使用场景

需要透明且动态的扩张类的功能时

动态增加,动态撤销

3. 优缺点

优点:动态扩展一个实现类的功能,装饰类和被装饰类可以独立发展,不会相互耦合

缺点:多层装饰比较复杂

4. Android源码中的使用

在Android中有以下继承关系,Context是抽象类,而下面三者这可以看作其装饰类

Activity-->ContextThemeWrapper-->ContextWrapper-->Context

Service-->ContextWrapper-->Context

Application-->ContextWrapper-->Context

5. 实例演示

以人们穿衣服为例

1. 创建一个People类,只有一个通用的方法--穿内裤

Android设计模式-20-装饰模式_第1张图片

2. 创建一个装饰器基类

Android设计模式-20-装饰模式_第2张图片

3. 创建装饰器的实现类,一个土豪装饰器,一个乞者装饰器

Android设计模式-20-装饰模式_第3张图片

4. 创建people实例,并分别用不同的装饰器装饰

Android设计模式-20-装饰模式_第4张图片

这样同一个实例对象可以自由的切换装饰器,对其穿着进行不同的扩展,耦合性很低,而且不会影响people类本身的继承体系,people可以继续衍生出其他子类,如程序员,产品经理等,还可以复用上面的装饰器进行装饰

 我是今阳,如果想要进阶和了解更多的干货,欢迎关注公众号”今阳说“接收我的最新文章

Android设计模式-20-装饰模式_第5张图片

你可能感兴趣的:(Android设计模式-20-装饰模式)