Decorator装饰器,就是动态地给一个对象添加一些额外的职责,装饰器模式具有如下的特征:
a. 它必须具有一个装饰的对象
b. 它必须拥有与被装饰对象相同的接口
c. 它可以给被装饰对象添加额外的功能
其最主要特征:保持接口,增强性能。
其主要代码如下所示:
package decorator; /** * 源接口 * @author lenovo * */ public interface Sourcable { public void operation(); }
package decorator; /** * 源类 * @author lenovo * */ public class Source implements Sourcable { public void operation() { // TODO Auto-generated method stub System.out.println("源类方法"); } }
package decorator; /** * 装饰器类 * @author lenovo * */ public class Decoator implements Sourcable { private Sourcable source; public Decoator(Sourcable source){ this.source = source; } public void operation() { // TODO Auto-generated method stub //调用被装饰类的方法 source.operation(); //新增加的功能 operation1(); } private void operation1(){ System.out.println("新增加的功能"); } }
package decorator; public class DecatorTest { /** * 测试类 * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Sourcable source = new Source(); Sourcable decoator = new Decoator(source); decoator.operation(); } }
源类Source与装饰类Decoator拥有共同的接口Sourcable,装饰类Decoator对源类Source的功能进行了相应的添加。
装饰器模式一般在以下情况使用:
需要扩展一个类的功能,或给一个类增加附加责任。
需要动态地给一个对象增加功能,这些功能可以动态撤消。
需要增加一些基本的排列组合产生大量的功能,从而使继承关系变得不现实。