设计模式学习笔记(十二) 装饰模式

该篇主要说的是装饰模式。

定义

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

角色

Component抽象构件

是一个接口或者是抽象类。

ConcreteComponent具体构件

实现类。

Decorator装饰角色

一般是一个抽象类,实现接口或者抽象方法。属性里必然有一个private变量指向Component抽象构件。

具体角色

具体装饰类。

代码

抽象构件
public abstract class Component {
    public abstract void operate();

}
具体构件
public class ConcreteComponent extends Component {
    @Override
    public void operate() {
        System.out.println("do something");
    }
}
抽象装饰类
public class Decorator extends Component {

    private Component component = null;

    public Decorator(Component component) {
        this.component = component;
    }
    @Override
    public void operate() {
        this.component.operate();
    }
}
具体的装饰类
public class ConcreteDecorator extends Decorator {
    public ConcreteDecorator(Component component) {
        super(component);
    }
    private void method(){
        System.out.println("do something method");
    }
    @Override
    public void operate() {
        this.method();
        super.operate();
    }
}

装饰模式的优缺点

优点
  1. 装饰类和被装饰类可以独立发展,而不会相互耦合。
  2. 装饰模式是继承关系的一个替代方案。
  3. 装饰模式可以动态地扩展一个实现类的功能。
缺点

多层的装饰是比较复杂的。

猜你喜欢

转载自blog.csdn.net/dulei17816/article/details/80664931
今日推荐