0

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 を呼び出してそれらを反復処理できるようにするか、クライアントにアイテムのコレクションを処理させる必要があります (現在の場合)。

4

1 に答える 1

1

これを処理する方法は、静的な NSMutableDictionary を作成することです。アプリの起動時に、新しいクラス メソッドを使用して既知のコーヒーの種類を登録できます。クラス メソッドは、辞書に対して setObject:forKey を実行します。各「キー」(名前) が一意でなければならないことを認識して、クライアントが必要な数のオブジェクトを登録できる手段を提供します。そうは言っても、彼は同じキーを使用して作成した最初のアイテムを上書きすることさえできます (そして、そのタイプに関連付けられているオブジェクトが何であれ置き換えます.

私は数字ではなく名前を使用しますが(現在のように)、辞書のキーに NSNumber を使用している限り機能する数字に固執したい場合。

于 2012-07-25T00:25:21.780 に答える