1. 程式人生 > >設計模式--裝飾模式

設計模式--裝飾模式

裝飾模式又名包裝(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();
        // 寫相關的業務程式碼
    }
}