软件设计模式(Design pattern),又称设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性。汇总目录链接:【玩转23种Java设计模式】学习目录汇总整理
一、简介
装饰者模式(Decorator Pattern)是一种比较常见的模式,其定义如下:动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比生成子类更为灵活。
它的主要组成部分:抽象被装饰者、具体被装饰者、抽象装饰者、具体装饰者。
二、实例
1、抽象被装饰者(Component)
public abstract class Component {
public abstract void operate();
}
2、具体被装饰者(ConcreteComponent)
public class ConcreteComponent extends Component {
@Override
public void operate() {
System.out.println("应该做一些事情");
}
}
3、抽象装饰者(Decorator)
public class Decorator extends Component {
private Component component = null;
public Decorator(Component component){
this.component = component;
}
@Override
public void operate() {
this.component.operate();
}
}
4、具体装饰者(ConcreteDecorator)
public class ConcreteDecorator extends Decorator {
public ConcreteDecorator(Component component){
super(component);
}
private void method(){
System.out.println("修饰方法执行了");
}
@Override
public void operate() {
this.method();
super.operate();
}
}
5、Main
public class Main {
public static void main(String[] args) {
Component component = new ConcreteComponent();
component = new ConcreteDecorator(component);
component.operate();
}
}
控制台输出:
修饰方法执行了
应该做一些事情
三、总结
1、优点
- 装饰者类和被装饰类可以独立发展,而不会相互耦合。
- 装饰模式是继承关系的一个替代方案。
2、缺点
- 多层的装饰是比较复杂的,尽量减少装饰类的数量,以便降低系统的复杂度。
3、应用场景
- 需要扩展一个类的功能,或给一个类增加附加功能。
- 需要动态地给一个对象增加功能,这些功能可以再动态地撤销。
- 需要为一批兄弟类进行改装或加装功能,当然是首选装饰模式。