裝飾器模式

2021-10-08 02:26:34 字數 2565 閱讀 7554

問題:假設我們有乙份手抓餅,但是加不同的配菜,這樣就會產生很多很多必要但重複的類:

如果用繼承的話,由於配菜之間兩兩搭配,三三搭配都有,是十分客觀的,最終導致類的數量**增長

手抓餅介面和具體的乙個手抓餅實現

package decorator;

/** * description:手抓餅介面 描述抽象的手抓餅

*/public

inte***ce

handpancake

package decorator;

/** * description: noteless 家的手抓餅

*/public

class

notelesshandpancake

implements

handpancake

/** * 計算 noteless 家 乙份手抓餅的**

*/@override

public integer calccost()

}

裝飾器(配菜抽象類)

package decorator;

/** *description:裝飾器類實現了手抓餅介面,具有了手抓餅的型別

*/public

abstract

class

decorator

implements

handpancake

/** * 提供手抓餅

*/@override

public string offerhandpancake()

/** * 提供手抓餅的**

*/@override

public integer calccost()

具體的配菜

package decorator;

/** * description:培根

*/public

class

bacon

extends

decorator

(繼承的是乙個手抓餅,無論是什麼手抓餅)

@override

public string offerhandpancake()

@override

public integer calccost()

}package decorator;

/** * description:雞蛋

*/public

class

eggextends

decorator

@override

public string offerhandpancake()

@override

public integer calccost()

}package decorator;

/** * description:烤腸

*/public

class

sausage

extends

decorator

@override

public string offerhandpancake()

@override

public integer calccost()

}package decorator;

/** * description:青菜

*/public

class

vegetable

extends

decorator

@override

public string offerhandpancake()

@override

public integer calccost()

}

顧客部分

package decorator;

/** * description:顧客具有名字,然後購買手抓餅

*/public

class

customer

public

void

buy(handpancake handpancake)

}

測試類

package decorator;

/** * description: 手抓餅3塊 sausage 烤腸 3塊 bacon 培根 4塊 egg 雞蛋2塊 vegetable

* 青菜 1塊

*/public

class

test

}

最重要的部分是在裝飾器(實際配菜)那裡

我們可以看到,傳進來並且返回的實際上還是那個手抓餅,但是配菜的方法已經被包裝了一層,加入配菜的資訊了,又因為這實際上還是個手抓餅,所以可以繼續加「其他配菜」

bacon

(handpancake handpancake)

事實上我們最外層的類一直呼叫的都只是最早「手抓餅」的構造器。

但是其他的方法已經被層層裝飾過了

裝飾器模式

大話設計模式 裝飾器模式 為已有功能動態地新增更多功能,當系統需要新功能,向舊的類中新增新功能,裝飾了原有類的核心職責和行為,而不改變它們 就像包裝袋一樣,有 的包裝袋包裝之前裝好東西的包裝袋 ifndef clothes h define clothes h include using names...

裝飾器模式

裝飾器設計模式 對真實物件動態的新增功能 抽象元件 author zhangjianbin public inte ce icar 俱體構件物件 真實的物件 author zhangjianbin class car implements icar 裝飾器物件 author zhangjianbin...

裝飾器模式

一 概念 裝飾模式能夠實現動態的為物件新增功能,是從乙個物件外部來給物件新增功能。通常給物件新增功能,要麼直接修改物件新增相應的功能,要麼派生對應的子類來擴充套件,抑或是使用物件組合的方式。顯然,直接修改對應的類這種方式並不可取。在物件導向的設計中,而我們也應該 盡量使用物件組合,而不是物件繼承來擴...