装饰模式的定义:动态的给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比生成子类更为灵活。
装饰模式的示例图如下:
如图所示,主要包括四个部分:
1、Component抽象组件,是一个接口或者抽象类,就是定义我们最核心的对象,也就是最原始的对象。
2、ConcreteComponent具体组件,最核心、最原始、最基本的接口或抽象类的实现,即Component的实现。
3、Decorator装饰角色,一般是一个抽象类,其实现或继承Component,它的属性里必然有一个Component类型的private变量。
4、具体装饰角色,如图ConcreteDecoratorA和ConcreteDecoratorB。
在Decorator类型,方法的并未正在的实现,而是调用ConcreteComponent中的方法,ConcreteComponent类型才是方法的具体实现,类似于代理模式。
ConcreteDecoratorA和ConcreteDecoratorB类继承Decorator类,继承其方法并继续扩张,即装饰其他的特有的东西。
Android中Context的设计模式即是这种装饰模式:
android.content.Context是Componet抽象组件,android.app.ContextImpl继承Context类,具体实现其方法,实现应用与android框架层服务的连接沟通。
android.app.ContextWrapper即Decorator,ContextThemeWrapper继承ContextWrapper,实现Activity主题,Activity即具体装饰角色,扩充方法。