一、定义
动态的给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。
二、结构图
三、代码示例
1、演示Action.java
/**
* 装饰者模式演示,
* @author lattice
*
*/
public class Action {
public static void main(String[] args) {
ConcreteComponent c=new ConcreteComponent();
CreateDecoratorA d1=new CreateDecoratorA();
CreateDecoratorB d2=new CreateDecoratorB();
d1.setComponent(c);
d2.setComponent(c);
d2.Operation();
}
}
2、组件component.java
/**
* 组件
* @author lattice
*
*/
public abstract class Component {
public abstract void Operation();
}
/**
* 通过创建多个组件抽象类子类来实现同样方式调度不同方法
* @author lattice
*
*/
class ConcreteComponent extends Component{
@Override
public void Operation(){
System.out.println("集体的对象操作!");
}
}
3、装饰者Decorator.java
/**
* 装饰者实现组件调度
* @author lattice
*
*/
public abstract class Decorator extends Component {
protected Component component;
public void setComponent(Component component){
this.component=component;
}
@Override
public void Operation(){
if(this.component!=null){
component.Operation();
}
}
}
4、具体装饰者创建CreateDecoratorA.java
/**
* 装饰者创建
* @author lattice
*
*/
public class CreateDecoratorA extends Decorator {
@Override
public void Operation(){
super.Operation();
System.out.println("具体装饰对A的操作!");
}
}
class CreateDecoratorB extends Decorator {
@Override
public void Operation(){
super.Operation();
System.out.println("具体装饰对A的操作!");
this.addedBeheive();
}
private void addedBeheive(){
System.out.println("自定义私有方法");
}
}