设计模式之装饰者模式
定义
又名包装者模式,客户端以透明的方式扩展对象的功能,是继承关系的替代方案。
作用
- 在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责。
- 处理那些可以撤消的职责。
- 当不能采用生成子类的方法进行扩充时。一种情况是,可能有大量独立的扩展,为支持每一种组合将产生大量的 子类,使得子类数目呈爆炸性增长。另一种情况可能是因为类定义被隐藏,或类定义不能用于生成子类。
角色
-
抽象构建角色
给出一个抽象接口,以规范准备接收附加责任的对象。
-
具体构建角色
定义一个将要接收附加责任的类
-
装饰者角色
持有具体构建的一个对象实例,并定义了一个与抽象接口相同的接口。
-
具体装饰者角色
负责给具体构建角色附加职责
实例
-
抽象角色
public interface Component { public void sampleOperation(); }
-
具体角色
public class ConcreteComponent implements Component { @Override public void sampleOperation() { System.out.println("男人在吃"); } }
-
装饰者角色
public abstract class Decorator implements Component { private ConcreteComponent mConcreteComponent; public void setmConcreteComponent(ConcreteComponent mConcreteComponent) { this.mConcreteComponent = mConcreteComponent; } @Override public void sampleOperation() { mConcreteComponent.sampleOperation(); } }
-
具体装饰者角色
public class ConcreteDecoratorA extends Decorator {
@Override public void sampleOperation() { super.sampleOperation(); reEat(); System.out.println("ConcreteDecoratorA类"); } public void reEat(){ System.out.println("再吃一碗"); }
}
-
调用
Log.i(TAG,"-----------------装饰者模式---------------"); ConcreteComponent mConcreteComponent=new ConcreteComponent(); ConcreteDecoratorA concreteDecoratorA=new ConcreteDecoratorA(); concreteDecoratorA.setmConcreteComponent(mConcreteComponent); concreteDecoratorA.sampleOperation();
-
打印结果: