裝飾器模式的定義與特點
裝飾器(Decorator)模式的定義:指在不改變現有對象結構的情況下,動态地給該對象增加一些職責(即增加其額外功能)的模式,它屬于對象結構型模式。
裝飾器模式的主要優點有:
- 不改變原類檔案。
- 不使用繼承。
- 動态擴充。
其主要缺點是:裝飾器模式會增加許多子類,過度使用會增加程式得複雜性。
裝飾器模式的結構與實作
1. 模式的結構
裝飾器模式主要包含以下角色。
- 抽象構件(Component)角色:定義一個抽象接口以規範準備接收附加責任的對象。
- 具體構件(ConcreteComponent)角色:實作抽象構件,通過裝飾角色為其添加一些職責。
- 抽象裝飾(Decorator)角色:繼承抽象構件,并包含具體構件的執行個體,可以通過其子類擴充具體構件的功能。
- 具體裝飾(ConcreteDecorator)角色:實作抽象裝飾的相關方法,并給具體構件對象添加附加的責任。
裝飾器模式的結構圖如圖 1 所示。
圖1 裝飾器模式的結構圖
2. 模式的實作
//抽象構件角色
interface Component {
public void operation();
}
//具體構件角色
class ConcreteComponent implements Component {
public ConcreteComponent() {
System.out.println("建立具體構件角色");
}
public void operation() {
System.out.println("調用具體構件角色的方法operation()");
}
}
//抽象裝飾角色
abstract class Decorator implements Component {
private Component component;
public Decorator(Component component) {
this.component = component;
}
public void operation() {
component.operation();
}
}
//具體裝飾角色
class ConcreteDecorator extends Decorator {
public ConcreteDecorator(Component component) {
super(component);
}
public void operation() {
super.operation();
addedFunction();
}
public void addedFunction() {
System.out.println("為具體構件角色增加額外的功能addedFunction()");
}
}
//使用
public class DecoratorPattern {
public static void main(String[] args) {
Component p = new ConcreteComponent();
p.operation();
Component d = new ConcreteDecorator(p);
d.operation();
}
}
裝飾器模式的應用執行個體
1. java IO