设计模式--装饰者模式

装饰模式

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

组成:

  • Component:给出一个抽象接口,以规范准备接收附加责任的对象。
  • Concrete Component:定义一个将要接收附加责任的类,需要被装饰的类。
  • Decorator:持有一个构件(Component)对象的实例,并实现一个与抽象构件接口一致的接口。
  • Concrete Decorator:负责给构件对象添加上附加的责任,具体的装饰类。

优点:

  • 通过使用不同的装饰类以及装饰类组合以及装饰类的排列组合,可以创造出不同的行为组合。
  • 扩展新的行为较为容易,可扩展性强。 

缺点:

  装饰模式会导致设计中出现许多小类,如果过度使用,会使程序变得很复杂。

简化版:

  • 如果只有一个Concrete Component类而没有抽象的Component接口时,可以让Decorator继承Concrete Component。
  • 如果只有一个Concrete Decorator类时,可以将Decorator和Concrete Decorator合并。

类图:

代码实现:

public interface Componet {
    public void operation();
}
public class DecreteComponet implements Componet {
    @Override
    public void operation() {
        System.out.println("Duck");
    }
}
public class Decorator implements Componet {
    Componet componet;

    public Decorator(Componet componet) {
        this.componet = componet;
    }

    @Override
    public void operation() {
        componet.operation();
    }
}
public class DecreteDecoratorA extends Decorator {

    public DecreteDecoratorA(Componet componet) {
        super(componet);
    }

    @Override
    public void operation() {
        //addbehaviorA(); 也可以放前面
        super.operation();
        addbehaviorA();
    }

    public void addbehaviorA(){
        System.out.println("can fly!");
    }
}
public class Client {
    public static void main(String[] args) {
        Componet componet = new DecreteComponet();
        Decorator decorator = new DecreteDecoratorA(componet);
        decorator.operation();
    }
}

原文地址:https://www.cnblogs.com/foreverYoungCoder/p/7804153.html