設計模式--裝飾模式
阿新 • • 發佈:2018-12-11
裝飾模式又名包裝(Wrapper)模式。裝飾模式以對客戶端透明的方式擴充套件物件的功能,是繼承關係的一個替代方案。
1.裝飾模式的結構
裝飾模式以對客戶透明的方式動態地給一個物件附加上更多的責任。換言之,客戶端並不會覺得物件在裝飾前和裝飾後有什麼不同。裝飾模式可以在不使用創造更多子類的情況下,將物件的功能加以擴充套件。
裝飾模式的類圖如下:
在裝飾模式中的角色有:
- 抽象構件(Component)角色:給出一個抽象介面,以規範準備接收附加責任的物件。
- 具體構件(ConcreteComponent)角色:定義一個將要接收附加責任的類。
- 裝飾(Decorator)角色:持有一個構件(Component)物件的例項,並定義一個與抽象構件介面一致的介面。
- 具體裝飾(ConcreteDecorator)角色:負責給構件物件“貼上”附加的責任。
2. 例子
2.1抽象構件角色
public interface Component {
public void sampleOperation();
}
2.2 具體構件角色
public class ConcreteComponent implements Component {
@Override
public void sampleOperation() {
// 寫相關的業務程式碼
}
}
2.3 裝飾角色
public class Decorator implements Component{
private Component component;
public Decorator(Component component){
this.component = component;
}
@Override
public void sampleOperation() {
// 委派給構件
component.sampleOperation();
}
}
2.4 具體裝飾角色
public class ConcreteDecoratorA extends Decorator {
public ConcreteDecoratorA(Component component) {
super(component);
}
@Override
public void sampleOperation() {
super.sampleOperation();
// 寫相關的業務程式碼
}
}
public class ConcreteDecoratorB extends Decorator {
public ConcreteDecoratorB(Component component) {
super(component);
}
@Override
public void sampleOperation() {
super.sampleOperation();
// 寫相關的業務程式碼
}
}