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

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

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


定义:

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


场景:

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


Android中的实现

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

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

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

ContextThemeWrapper又继承了ContextWrapper。

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


注意

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容