裝飾器模式的定義
裝飾器模式(Decorator Pattern)是一種結構型設計模式,允許向一個現有對象動態添加新功能,同時不改變其結構。它通過創建包裝對象(裝飾器)來包裹原始對象,并在保持原始對象方法簽名的基礎上擴展行為。
裝飾器模式的核心組件
1. 抽象組件(Component)
定義原始對象和裝飾器的共同接口,可以是抽象類或接口。
public interface Component {void operation();
}
2. 具體組件(Concrete Component)
實現抽象組件的具體類,即需要被裝飾的原始對象。
public class ConcreteComponent implements Component {@Overridepublic void operation() {System.out.println("原始對象的操作");}
}
3. 抽象裝飾器(Decorator)
繼承或實現抽象組件,并持有對組件對象的引用。
public abstract class Decorator implements Component {protected Component component;public Decorator(Component component) {this.component = component;}@Overridepublic void operation() {component.operation();}
}
4. 具體裝飾器(Concrete Decorator)
擴展抽象裝飾器,添加額外的功能。
public class ConcreteDecoratorA extends Decorator {public ConcreteDecoratorA(Component component) {super(component);}@Overridepublic void operation() {super.operation();addedBehavior();}private void addedBehavior() {System.out.println("裝飾器A添加的行為");}
}
裝飾器模式的應用場景
動態擴展功能:在不修改代碼的情況下為對象添加新功能。
替代子類繼承:避免通過子類繼承導致的類爆炸問題。
組合優于繼承:通過組合方式靈活擴展對象行為。
示例代碼調用
public class Client {public static void main(String[] args) {Component component = new ConcreteComponent();Component decoratedA = new ConcreteDecoratorA(component);decoratedA.operation();}
}
輸出結果:
原始對象的操作
裝飾器A添加的行為