書中'首先設計模式',裝飾者章節,它討論了當裝飾者處理具體類型和導致問題時的問題。我在本章中複製了一些Q & A:裝飾設計模式問題?
問:我有點擔心代碼可能會針對特定的具體組件(比如HouseBlend)進行測試,然後執行某些操作,如發出折扣。一旦我用修飾器包裝了HouseBlend,這不會再起作用。
答:完全正確。如果您的代碼依賴於具體組件的類型,裝飾器將會破壞該代碼。只要您只針對抽象組件類型編寫代碼,裝飾器的使用對您的代碼將保持透明。但是,一旦開始編寫針對具體組件的代碼,您將需要重新考慮應用程序設計和使用裝飾器。
有人可以給一個簡單的例子,說明'客戶'代碼是針對具體類型還是抽象類型寫的?前者如何給裝飾者帶來麻煩?
書中裝飾的樣本測試代碼是這樣的:
public class StarbuzzCoffee {
public static void main(String args[]) {
Beverage beverage2 = new DarkRoast();
beverage2 = new Mocha(beverage2);
beverage2 = new Mocha(beverage2);
beverage2 = new Whip(beverage2);
System.out.println(beverage2.getDescription()
+ 「 $」 + beverage2.cost());
...
}
}
寫入反對抽象類型此測試代碼(也是一種客戶端代碼)?
感謝,