JDK設計模式之 裝飾者模式

2022-03-23 07:18:12 字數 1205 閱讀 1352

classa

class b extends a 

class c extends a 

想進一步擴充套件類b和類c的功能,新增三個方法 method1()、 method2()、 method3()。

要求 類b和類c 滿足 可能新增乙個方法,兩個方法,或者三個方法

解決辦法,用繼承關係 給b寫7個子類(3個方法的排列組合 2的三次方-1) 給a也寫三個子類。

採用繼承的方式擴充套件b類和c類的功能,會導致子類的數目急劇增加,而且存在重複**。

在這種設計模式中,把需要擴充套件的功能(method1()、method2()、method3())放在裝飾類中,裝飾器類繼承a、因此擁有類a的介面。

在裝飾器中還包含了乙個類a的例項

因此:裝飾器不僅擁有類a例項的功能並且還能擴充套件類a例項的功能

下面定義三個裝飾器類 decorator1 decorator2 decorator3,他們分別提供一種新增的功能分別是 method1()、method2()、method3()

public

class decorator1 extends

a

public

void

method1()

}

public

class decorator2 extends

a

public

void

method2()

}

public

class decorator3 extends

a

public

void

method3()

}

在下面程式中對類b類進行了裝飾,使它們具有method1()和method2()的功能 這樣可以很靈活的滿足需求

public

class

test

}

可以看到 裝飾器設計模式簡化了類的繼承關係,並且提高**的可重用性

設計模式之 裝飾者模式

一 裝飾者模式 裝飾者模式又稱為包裝模式。動態地給乙個物件增加新的職責。若要擴充套件功能,裝飾者提供了比繼承更有彈性的替代方案。裝飾者模式顧名思義就是對乙個物件進行裝飾,具體怎樣裝飾呢?那就是給這個物件不斷的增加職責方法。給乙個物件增加方法不簡單啊,用繼承或者直接在物件的類中增加方法。如果我們要對自...

設計模式之裝飾者模式

此模式動態將職責附加到物件上,若要擴充套件功能,裝飾者提供了比繼承更具彈性的代替方案,以一圖一概括。要點1 裝飾者和被裝飾物件有相同的超型別。2 可以用乙個或多個裝飾者包裝乙個物件。3 裝飾者可以在所委託被裝飾者的行為之前或之後,加上自己的行為,以達到特定的目的。4 物件可以在任何時候被裝飾,所以可...

設計模式之裝飾者模式

public abstract class beverage 返回當前飲品的 public abstract double cost 為了讓condiment decorator 調料裝飾者 能夠取代beverage,所以將它擴充套件至beverage類 public abstract class ...