裝飾者模式

2021-09-25 20:06:39 字數 2878 閱讀 4190

定義:

動態地將責任附加到物件上。若要擴充套件功能,裝飾者提供了比繼承更有彈性

的替代方案。

相信大家應該都吃過火鍋了,火鍋中鍋底是必須的,至於其他的配菜就需要自己點了。

下面以火鍋來談談裝飾者模式。

首先需要建立乙個火鍋的物件,後面鴛鴦火鍋,麻辣火鍋,清湯火鍋等都繼承它

abstract

class

pot//**,由子類實現

public

abstract

double

price()

;}

因為每個鍋底的**都不一樣,所以寫乙個抽象的price()方法,由子類決定**。

然後定義定義火鍋的例項: 清湯鍋底、鴛鴦鍋底等。

清湯鍋底:

class

clearsouppot

extends

pot@override

public

double

price()

}

鴛鴦鍋底

class

yuanyangpot

extends

pot@override

public

double

price()

}

鍋底已經鍵好了,現在我們需要加配菜了。首先建立乙個配菜的抽象類,所有配菜都繼承自它。

abstract

class

garnish

extends

pot

因為我們的配菜是來搭配火鍋的,所以要繼承pot類。

//蔬菜類

class

garnishvegetables

extends

garnish

@override

public string getname()

@override

public

double

price()

}

為了讓配菜類能夠引用到火鍋物件,所以在初始化的時候傳入火鍋物件。

同理建立garnishduckblood、garnishshrimp鴨血和蝦的類。

現在我們可以點乙份喜歡的火鍋了。

public

static

void

main

(string[

] args)

執行結果如下:

鴛鴦鍋底  +鴨血  +蔬菜

57.0

清湯鍋底 + 蝦 +蔬菜

77.0

這裡我們可以把火鍋當初乙個被裝飾的物件,它初始時只有對應的鍋底。而各種配菜則是裝飾品,新增到火鍋中,使其具有不同的配菜。

通過裝飾者模式,可以動態的給物件新增一些額外的職責。

裝飾者模式的通用結構

component 是乙個介面或抽象物件,是我們定義的最基本、最核心的元件。是被修飾的物件父類,如上面的火鍋類pot。

concretecomponent 是元件component 的實現類,是我們要裝飾的具體物件,如上面的鴛鴦鍋,清湯鍋。

一般是乙個抽象類,繼承自component。

繼承自decorator 類,是裝飾者decorator 的例項。如上面的蔬菜,鴨血,蝦都是裝飾者

component :元件定義

abstract

class

component

concretecomponent 元件的例項物件定義

class

concretecomponent

extends

component

}

decorator 抽象裝飾者

abstract

class

decorator

extends

component

//委託給被修飾者執行

@override

void

operate()

}

concretedecoratora、concretedecoratorb具體的裝飾類定義

class

concretedecoratora

extends

decorator

//定義自己的修飾方法

private

voidm1(

)//重寫父類方法

@override

void

operate()

}class

concretedecoratorb

extends

decorator

public

voidm2(

)//重寫父類方法

@override

void

operate()

}

執行裝飾者模式:

public

static

void

main

(string[

] args)

執行結果:

方法2 修飾

方法1 修飾

做一些事

優缺點

裝飾者模式可以動態的增加類的功能,但如果使用過量會增加會出現很多小物件,讓程式變得複雜。

參考:《head first設計模式》

裝飾者模式

裝飾者模式 動態地將責任附加到物件上。若要擴張功能,裝飾者提供了比繼承更有彈性的替代方案。裝飾者可以在所委託被裝飾者的行為之前或之後,加上自己的行為,以達到特定的目的。裝飾者與被裝飾者物件具有相同的超型別。include include using namespace std class bever...

裝飾者模式

裝飾者模式,是在不改變原類檔案和使用繼承的情況下,動態地擴充套件乙個物件的功能。它是通過建立乙個包裝物件,也就是裝飾來包裹真實的物件。裝飾者模式中的角色 1 被裝飾者抽象component,是乙個介面或抽象類,就是定義最核心的物件,也是最原始的物件,這個類是需要裝飾類的基類。2 被裝飾者具體實現co...

裝飾者模式

裝飾者模式 裝飾者模式的好處是便於擴充套件,對乙個東西不管怎麼變,只需要找到相應的元件去改變它 1.如何組裝在一起 建立主題 packetbodycreator body new packetbodycreator 建立header packethtmlheadercreator html new ...