裝飾模式指的是在不必改變原類檔案和使用繼承的情況下,動態地擴充套件乙個物件的功能。它是通過建立乙個包裝物件,也就是裝飾來包裹真實的物件。
拿乙個很常見的事來舉例:吃火鍋。我們吃火鍋的時候首先需要點鍋底,鍋底有很多種,如清湯,牛油,番茄,鴛鴦等。點完鍋底之後我們需要點菜品。那麼我們如何來設計乙個火鍋類來表示乙個火鍋裡到底有什麼菜品?比較容易想到的事建立乙個火鍋類,然後在類中設定不同的布林變數來標記火鍋中是否有某種菜品。這樣是可行的,但是卻存在一些缺點,當我們需要去擴充套件**時候,例如火鍋店又推出了幾款新的菜品或者刪除了幾款菜品,我們都需要在火鍋類的**裡進行增加或者刪除**。我們違反了乙個設計模式中的重要原則:類應該對擴充套件開放,對修改關閉。我們的目標是允許類容易擴充套件,在不修改現有**的情況下,就可搭配新的行為。這樣的設計具有彈性可以應對改變,可以接受新的功能來應對改變的需求。具體設計如下:
1.建立火鍋的超類(被裝飾物件超類):
public
abstract
class
huoguo
2.定義具體鍋底(具體被裝飾物件):
public
class
fanqieguo
extends
huoguo
@override
public string name()
}public
class
niuyouguo
extends
caipin
@override
public string name()
}
3.定義菜品抽象類(裝飾者超類):
public
abstract
class
caipin
extends
huoguo
4.定義具體菜品(具體的裝飾者):
public
class
feiniu
extends
caipin
@override
public
float
cost()
@override
public string name()
}public
class
maodu
extends
caipin
@override
public
float
cost()
@override
public string name()
}
5.測試
public
class
test
}
設計模式之 裝飾者模式
一 裝飾者模式 裝飾者模式又稱為包裝模式。動態地給乙個物件增加新的職責。若要擴充套件功能,裝飾者提供了比繼承更有彈性的替代方案。裝飾者模式顧名思義就是對乙個物件進行裝飾,具體怎樣裝飾呢?那就是給這個物件不斷的增加職責方法。給乙個物件增加方法不簡單啊,用繼承或者直接在物件的類中增加方法。如果我們要對自...
設計模式之裝飾者模式
此模式動態將職責附加到物件上,若要擴充套件功能,裝飾者提供了比繼承更具彈性的代替方案,以一圖一概括。要點1 裝飾者和被裝飾物件有相同的超型別。2 可以用乙個或多個裝飾者包裝乙個物件。3 裝飾者可以在所委託被裝飾者的行為之前或之後,加上自己的行為,以達到特定的目的。4 物件可以在任何時候被裝飾,所以可...
設計模式之裝飾者模式
public abstract class beverage 返回當前飲品的 public abstract double cost 為了讓condiment decorator 調料裝飾者 能夠取代beverage,所以將它擴充套件至beverage類 public abstract class ...