設計模式專題(七)裝飾器模式

蘇啟豪發表於2020-09-23

目錄

定義

裝飾器模式的結構

示例程式碼

定義

裝飾器模式又名包裝(Wrapper)模式。裝飾器模式以對客戶端透明的方式擴充物件的功能,是繼承關係的一種替代方案。

裝飾器模式的結構

裝飾器模式以對客戶透明的方式動態的給一個物件附加上更多的責任。換言之,客戶端並不會覺得物件在裝飾前和裝飾後有什麼不同。裝飾器模式可以在不是用創造更多子類的情況下,將物件的功能加以擴充。

裝飾器模式的類圖如下:

裝飾器模式的類圖

在裝飾器模式中的角色有:

  • 抽象構件(Component)角色:給出一個抽象介面,已規範準備接收附加責任的物件。
  • 具體構件(ConcreteComponent)角色:定義一個將要接收附加責任的類
  • 裝飾(Decorator)角色:持有一個構件(Component)物件的例項,並定義一個與抽象構件介面一致的介面。
  • 具體裝飾(ConcreteDecorator)角色:負責給構件物件“貼上”附加的責任。

示例程式碼

抽象構件角色

public interface Component {
    public void sampleOpreation();
}

具體構件角色

public class ConcreteComponent implements Component {
    @Override
    public void sampleOpreation() {
        // TODO 完成相關的業務程式碼
    }
}

裝飾角色

public class Decorator implements Component {
    private Component component;
    
    public Decorator(Component component) {
        this.component = component;
    }
    
    @Override
    public void sampleOpreation() {
        //委派給構件
        component.sampleOpreation();
    }

}

具體裝飾角色A

public class ConcreteDecoratorA extends Decorator {
    public ConcreteDecoratorA(Component component) {
        super(component);
    }
    
    @Override
    public void sampleOpreation() {
        super.sampleOpreation();
        //TODO 完成相關的業務程式碼
    }
}

具體裝飾角色B

public class ConcreteDecoratorB extends Decorator {
    public ConcreteDecoratorB(Component component) {
        super(component);
    }
    
    @Override
    public void sampleOpreation() {
        super.sampleOpreation();
        //TODO 完成相關的業務程式碼
    }
}

 

相關文章