本文是本人在看head first設計模式中的裝飾者模式後根據個人的理解寫下的,若有錯誤之處,請批評指出。
繼承與裝飾者模式:利用繼承設計子類的行為,是在編譯時靜態決定,而且所有子類都會繼承到相同的行為。裝飾者模式利用組合和委託的做法在執行時動態地擴充套件物件的行為
設計原則:類應該對擴充套件開放,對修改關閉
裝飾者模式的特點:
1.裝飾者和被裝飾者有相同的超型別
2.乙個物件能被乙個或多個的裝飾者裝飾
3.裝飾過的物件能替代被裝飾的物件
4.裝飾者可以在所委託被裝飾者的行為之前與/或之後,加上自己的行為,已達到特定的目的
5.物件可以在任何時候被裝飾,所以可以在執行時動態地、不限量地用你喜歡的裝飾者來裝飾物件
裝飾者模式的說明:動態地將責任附加到物件上。若要擴充套件功能,裝飾者提供了比繼承更有彈性的替代方案
裝飾者模式的類圖:
例項的類圖:
例項**:
beverage類:
public
abstract
class beverage
public
abstract
double
cost();
}
darkroast類:
public
class
darkroast
extends
beverage
public
double
cost()
}
condiment類:
public
abstract
class
condiment
extends
beverage
}
mocha類:
public
class
mocha
extends
condiment
public string getdescription()
public
double
cost()
}
driver類:
public
class driver
}
設計模式之 裝飾者模式
一 裝飾者模式 裝飾者模式又稱為包裝模式。動態地給乙個物件增加新的職責。若要擴充套件功能,裝飾者提供了比繼承更有彈性的替代方案。裝飾者模式顧名思義就是對乙個物件進行裝飾,具體怎樣裝飾呢?那就是給這個物件不斷的增加職責方法。給乙個物件增加方法不簡單啊,用繼承或者直接在物件的類中增加方法。如果我們要對自...
設計模式之裝飾者模式
此模式動態將職責附加到物件上,若要擴充套件功能,裝飾者提供了比繼承更具彈性的代替方案,以一圖一概括。要點1 裝飾者和被裝飾物件有相同的超型別。2 可以用乙個或多個裝飾者包裝乙個物件。3 裝飾者可以在所委託被裝飾者的行為之前或之後,加上自己的行為,以達到特定的目的。4 物件可以在任何時候被裝飾,所以可...
設計模式之裝飾者模式
public abstract class beverage 返回當前飲品的 public abstract double cost 為了讓condiment decorator 調料裝飾者 能夠取代beverage,所以將它擴充套件至beverage類 public abstract class ...