装饰器设计模式

2018, Apr 20    

装饰器设计模式

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

  • 优点:动态地扩展一个实现类的功能
  • 缺点:多层的装饰是比较复杂的,尽量减少装饰类的数量
  1. 抽象构件

    public abstract class Component {
    	// 抽象的方法
    	public abstract void operate();
    }
    
  2. 具体构件:需要被装饰的类

    public class ConcreteComponent extends Component {
    	// 具体实现
    	@Override
    	public void operate() {
    		System.out.println("do Something");
    	}
    }
    
  3. 抽象装饰者:若只有一个装饰类,则可以没有抽象装饰角色

    public abstract class Decorator extends Component {
    	private Component component = null;
    	//通过构造函数传递被修饰者
    	public Decorator(Component _omponent){
    		this.component = component;
    	}
    	//委托给被修饰者执行
    	@Override
    	public void operate() {
    		this.component.operate();
    	}
    }
    
  4. 具体装饰者

    public class ConcreteDecorator1 extends Decorator {
    	//定义被修饰者
    	public ConcreteDecorator1(Component component){
    		super(component);
    	}
    	//定义自己的修饰方法
    	private void method1(){
    		System.out.println("method1 修饰");
    	}
    	//重写父类的Operation方法
    	public void operate(){
    		this.method1();
    		super.operate();
    	}
    }
    

测试函数

public class Client {
	public static void main(String[] args) {
		Component component = new ConcreteComponent();
		//第一次修饰
		component = new ConcreteDecorator1(component);
		component.operate();
	}
}