装饰器模式 Decorator Pattern
装饰器模式也叫包装模式(Wrapper Pattern),是指在不改变原有对象的基础之上,将功能附加到对象上,提供比继承更有弹性的替代方案(扩展原有对象的功能)。
装饰器模式就是一种特殊的代理模式;装饰器模式强调自身的功能扩展,用自己说了算的透明扩展,可动态定制扩展;代理模式强调代理过程的控制。
优点:
- 1.装饰器是继承的有力补充,比继承灵活,不改变原有对象的情况下,动态地给一个对象扩展功能,即插即用。
- 2.通过使用不同装饰类以及这些装饰类的排列组合,可实现不同效果。
- 3.装饰器模式完成符合开闭原则。
缺点:
- 1.会出现更多的代码,更多的类,增加程序的复杂性。
- 2.动态装饰时,多层装饰会更加复杂。
public abstract class Component {
public abstract void cost();
}
public abstract class Decorator extends Component {
private Component component;
public Decorator(Component component)
{
this.component = component;
}
@Override
public void cost(){
this.component.cost();
}
}
public class ConcreteComponent extends Component {
@Override
public void cost() {
System.out.println("ConcreteComponent basic cost.");
}
}
public class ConcreteDecorator extends Decorator {
public ConcreteDecorator(Component component) {
super(component);
}
// 定义自己的修饰逻辑
private void decorateMethod(){
System.out.println("ConcreteDecorator add decorateMethod");
}
// 重写父类的方法
public void cost(){
this.decorateMethod();
super.cost();
}
}
public class DecoratorTest {
public static void main(String[] args) {
Component component = new ConcreteComponent();
component = new ConcreteDecorator(component);
component.cost();
}
}