4 種類のコーヒーのフレーバーがあるコーヒー ショップのメニュー アプリケーションを作成しています。1. ブラック コーヒー 2. カプチーノ 3. モカ 4. アイス コーヒー。
これらのオブジェクトを生成するためにファクトリ メソッドを使用しました。
+ (コーヒー *) getInstance:(COFFE_TYPE /*列挙型*/):タイプ{ コーヒー *returnValue = nil; スイッチ(タイプ){ ブラックの場合: returnValue = new Black_Coffee(); 壊す; カプチーノの場合: returnValue = new Cap_Coffee(); 壊す; ケース モカ: returnValue = new Mocha_Coffee(); 壊す; case Iced: returnValue = new Iced_Coffee(); 壊す; } 戻り値を返します。 }
私のクライアントでは、利用可能なすべての Coffee の List を維持する必要があります。特定の基本クラスのサブクラスを知る方法はないと思うので、すべてのサブクラスを手動で繰り返し、各 Object の作成にファクトリ メソッドを使用する必要があります。50種類のコーヒーを飲むと、これは面倒になります(私はそうします)。したがって、新しいタイプを追加するたびに、それをファクトリに追加する必要があり、クライアントは追加のアイテムが追加される必要があります。
このロジック全体を 1 か所に転送できる方法はありますか。そのため、ファクトリ メソッドだけが追加のアイテムについてのみ認識し、クライアントがファクトリ クラス自体で getAllItems を呼び出してそれらを反復処理できるようにするか、クライアントにアイテムのコレクションを処理させる必要があります (現在の場合)。