1. 概念
動態將職責附加到對象上,若要擴充功能,裝飾者提供了比繼承更具彈性的代替方案。它是通過建立一個封裝對象,也就是裝飾來包裹真實的對象。[由於繼承的靜態特質使其缺乏靈活性;且隨著子類的增多、組合,會導致更多子類的膨脹。類應設計的對擴充開放,對修改關閉。裝飾的意思:就是封裝一下。把另的對象封裝一下。]
2. UML圖
3.代碼
/************業務介面 Component************/
public interface Component
{
void operation();
}
/************業務介面 Component************/
public class ConcreteComponent implements Component {
public void operation() {
//
}
}
/************裝飾 Decorator************/
public class Decorator implements Component
{
private Component component;
public Decorator(Component component)
{
this.component = component;
}
public void operation()
{
component.operation();
}
}
/************具體Decorator************/
public class ConcreteDecorator extends Decorator
{
public ConcreteDecorator(Component component) {
super(component);
}
public void operation()
{
super.operation();
addBehavior();
}
private void addBehavior()
{
System.out.println("addBehavior");
}
}
/************運行樣本************/
ConcreteDecorator concreteDecorator=new ConcreteDecorator(new ConcreteComponent());
concreteDecorator.operation();
4.應用情境
1)需要擴充一個類的功能,或給一個類增加附加責任。
2)需要動態地給一個對象增加功能,這些功能可以再動態地撤銷。
3)需要增加由一些準系統的排列組合而產生的非常大量的功能,從而使繼承關係變得不現實。