1.装饰器模式的定义
动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式比生成子类更为灵活
2.装饰器模式的UML图
Component:组件对象的接口,可以给这些对象动态的添加职责
ConcreteComponent:具体的组件对象,实现组件对象接口,通常就是被装饰器装饰的原始对象,也就是可以给这个对象添加职责
Decorator:所有装饰器的抽象父类,需要定义一个与组件接口一致的接口,并持有一个Component对象,其实就是持有一个被装饰的对象
3.代码实现
public abstract class Component
{
public void operation();
}
public class ConcreteComponent extends Component{
public void operation(){
}
}
public abstract class Decorator extends Component
{
protected Component component;
public Decorator(Component component){
this.component=component;
}
public void operation(){
this.component.operation();
}
}
public class ConcreteDecoratorA extends Decorator
{
private String addedState;
public String getAddedState(){
return this.addedState;
}
public void setAddedState(String addedState){
this.addedState=addedState;
}
public ConcreteDecoratorA(Component component){
this.component=component;
}
public void operation(){
this.component=compnent;
}
}
public class ConcreteDecoratorB extends Decorator
{
private String addedState;
public String getAddedState(){
return this.addedState;
}
public void setAddedState(String addedState){
this.addedState=addedState;
}
public ConcreteDecoratorB(Component component){
this.component=component;
}
public void operation(){
this.component=compnent;
}
}
public class Client
{
public static void main(String[] args){
Component component=new ConreteComponent();
Decorator decorator=new ConcreteDecoratorA(component);
decorator.operation();
}
}
4.装饰模式的本质 :动态组合