本「Head first design patterns」のデコレータの章では、デコレータが具象型を処理し、問題を引き起こす場合の問題について説明しています。この章のいくつかの Q&A をコピーしています。
Q: 特定の具体的なコンポーネント (HouseBlend など) をテストして、割引を発行するなど、何かを実行するコードについて少し心配しています。HouseBlend をデコレータでラップすると、これは機能しなくなります。
A: その通りです。具体的なコンポーネントの型に依存するコードがある場合、デコレーターはそのコードを壊します。抽象コンポーネント タイプに対してのみコードを記述する限り、デコレータの使用はコードに対して透過的です。ただし、具体的なコンポーネントに対してコードを書き始めると、アプリケーションの設計とデコレータの使用を再考する必要があります。
「クライアント」コードが具象型と抽象型に対して書かれていることの意味について、誰かが簡単な例を挙げてもらえますか? そして、前者がどのようにデコレーターに問題を引き起こすのでしょうか?
この本のデコレータのサンプル テスト コードは次のようになります。
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());
...
}
}
このテスト コード (クライアント コードでもあります) は、抽象型に対して記述されていますか?
ありがとう、