目录
什么是装饰模式
动态的给对象添加额外的功能。
为什么要用装饰模式
将功能动态的添加给指定对象,以便给对象添加指定额外的功能。
装饰模式组成
抽象对象
public abstract class Component {
public abstract void doSomeThing();
}
具体对象(被装饰对象)
public class ObjComponent extends Component {
@Override
public void doSomeThing() {
System.out.println("具体对象执行方法");
}
}
抽象装饰类
public abstract class Decorator extends Component {
private Component component = null;
public Decorator(Component component) {
this.component = component;
}
@Override
public void doSomeThing() {
this.component.doSomeThing();
}
}
具体装饰类
public class DecoratorImpl1 extends Decorator {
public DecoratorImpl1(Component component) {
super(component);
}
private void selfFun1(){
System.out.println("装饰类1自身的方法1");
}
@Override
public void doSomeThing() {
this.selfFun1();
super.doSomeThing();
}
}
public class DecoratorImpl2 extends Decorator{
public DecoratorImpl2(Component component) {
super(component);
}
private void selfFun1(){
System.out.println("装饰类2自身的方法1");
}
@Override
public void doSomeThing() {
super.doSomeThing();
this.selfFun1();
}
}
测试驱动
public class Main {
public static void main(String[] args) {
Component component = new ObjComponent();
component = new DecoratorImpl1(component);
component = new DecoratorImpl2(component);
component.doSomeThing();
}
}
需要注意的几点
当使用装饰模式层数较多时,容易增加逻辑的复杂性,糟糕的情况下可能需要一层一层的往下找寻问题。