装饰模式(Decorator)

关键:让装饰对象拥有被装饰对象的实例,使用时将被装饰对象实例传递给装饰对象进行封装

 

应用场景:Java I/O 标准库的设计

 

定义:在不改变现有对象结构的情况下,动态地给该对象增加一些功能

 

抽象构件:定义一个接口或抽象类作为规范

具体构件:实现抽象构件,作为被装饰对象

抽象装饰:继承抽象构件,拥有具体构件的实例。抽象类

具体装饰:实现抽象装饰,给具体构件增加功能,作为装饰对象

 

注意:装饰模式所包含的 4 个角色不是任何时候都要存在的,在有些应用环境下模式是可以简化的

 

//抽象构件
interface Component {
	public void operation();
}

  

//具体构件
class ConcreteComponent implements Component {
	public ConcreteComponent() {
		...
	}
	
	public void operation() {
		System.out.println("具体构件:operation()");
	}
}

  

//抽象装饰
public abstract class Decorator extends {
	private Component component;
	
	public Decorator(Component component) {
		this.component = component;
	}
	
	public void operation() {
		component.operation();
	}
}

  

//具体装饰
class ConcreteDecorator extends Decorator {
	public ConcreteDecorator(Component component) {
		super(component);
	}
	
	public void operation() {
		super.operation();
		addFunction();
	}
	
	public void addFunction() {
		System.out.println("增加功能");
	}
}

  

 

posted @ 2021-04-19 10:41  455994206  阅读(57)  评论(0)    收藏  举报