装饰模式Decrator

装饰模式:动态地给一个对象增加一些额外的职责,就增加的功能来说,Decorator模式相比生成子类更加灵活。

装饰模式可以在不创造更多的子类的模式下,将对象的功能加以扩展。

装饰模式与类继承的区别:

1) 装饰模式是一种动态行为,对已经存在类进行随意组合,而类的继承是一种静态的行为,一个类定义成什么样的,该类的对象便具有什么样的功能,无法动态的改变。

2) 装饰模式扩展的是对象的功能,不需要增加类的数量,而类继承扩展是类的功能,在继承的关系中,如果我们想增加一个对象的功能,我们只能通过继承关系,在子类中增加两个方法。

3) 装饰模式是在不改变原类文件和使用继承的情况下,动态的扩展一个对象的功能,它是通过创建一个包装对象,也就是装饰来包裹真是的对象。

4) 装饰模式把对客户端的调用委派给被装饰的类,装饰模式的关键在于这种扩展完全透明的。

package com.qinsoft.design;

/**
 * 装饰模式--结构型
 */
interface Component
{
   public void doSomething();

}

//构建角色:
class ConcreteComponent implements Component
{
   @Override
   public void doSomething()
   {
      System.out.println("功能A");
   }
}

//装饰角色:
class Decorate implements Component
{
   private Component component;

   public Decorate(Component component)
   {
      this.component = component;
   }
   
   @Override
   public void doSomething()
   {
      component.doSomething();
   }
}

//装饰角色1:
class ConcreteDecorate1 extends Decorate
{
   public ConcreteDecorate1(Component component)
   {
      super(component);
   }
   
   @Override
   public void doSomething()
   {
      super.doSomething();
      this.doAnotherDosomething();
   }
   
   private void doAnotherDosomething()
   {
      System.out.println("功能B");
   }
}


//客户端
public class Decrator
{

   public static void main(String[] args)
   {

      Component component = new ConcreteDecorate1(new ConcreteComponent());
      component.doSomething();
   }
}
原文地址:https://www.cnblogs.com/hnhcc39/p/2965975.html