問題:假設我們有乙份手抓餅,但是加不同的配菜,這樣就會產生很多很多必要但重複的類:
如果用繼承的話,由於配菜之間兩兩搭配,三三搭配都有,是十分客觀的,最終導致類的數量**增長
手抓餅介面和具體的乙個手抓餅實現
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...
裝飾器模式
一 概念 裝飾模式能夠實現動態的為物件新增功能,是從乙個物件外部來給物件新增功能。通常給物件新增功能,要麼直接修改物件新增相應的功能,要麼派生對應的子類來擴充套件,抑或是使用物件組合的方式。顯然,直接修改對應的類這種方式並不可取。在物件導向的設計中,而我們也應該 盡量使用物件組合,而不是物件繼承來擴...