一、定義
動態的給一個對象添加一些額外的職責,就增加功能來說,裝飾模式比生成子類更爲靈活。
二、結構圖
三、代碼示例
/**
* 裝飾者模式演示,
* @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();
}
}
/**
* 組件
* @author lattice
*
*/
public abstract class Component {
public abstract void Operation();
}
/**
* 通過創建多個組件抽象類子類來實現同樣方式調度不同方法
* @author lattice
*
*/
class ConcreteComponent extends Component{
@Override
public void Operation(){
System.out.println("集體的對象操作!");
}
}
/**
* 裝飾者實現組件調度
* @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();
}
}
}
/**
* 裝飾者創建
* @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("自定義私有方法");
}
}