每日Android源码设计模式之-20、装饰模式

Decorator Pattern也称包装模式Wrapper Pattern,他的结构图跟代理模式非常的像,装饰类去继承原始类的接口,装饰类在构造函数中传入原始类,并持有成员变量引用。

当我们要调用被原始类的某个方法的时候,我们是去调用装饰类的同名方法,然后装饰类做了一些额外的增强操作后,再去调用原始类的这个方法。


定义:

动态地给一个对象添加一些额外的职责。就增加功能来说,比继承更为灵活。


场景:

需要动态透明的扩展类的功能时。


Android中的实现

Context是一个抽象类,在装饰模式中相当于抽象组件,其内部定义了大量的抽象方法,比如startActivity方法。

具体的实现是在ContextImpl中完成的。ContextImpl相当于我们的组件具体实现类。

我们知道Activity是继承Context的,但是不是直接继承,而是继承ContextThemeWrapper,

ContextThemeWrapper又继承了ContextWrapper。

ContextWrapper中持有了context的引用,看出来了ContextWrapper其实就是装饰者。当我们在Acitivity中使用startActivity时,其实是在ContextWrapper中调用了context.startActivity


注意

代理模式是对原来的对象进行控制,而装饰模式是对原来的对象进行一个增强扩展。

你可能感兴趣的:(每日Android源码设计模式之-20、装饰模式)