0

我正在为有 4 种不同口味的咖啡的咖啡店创建一个菜单应用程序。1. 黑咖啡 2. 卡布奇诺 3. 摩卡 4. 冰咖啡。

我已经使用工厂方法来生成这些对象。

+ (Coffee *) getInstance:(COFFE_TYPE /*枚举*/):type{

   咖啡 *returnValue = nil;

   开关(类型){
     黑色案例:returnValue = new Black_Coffee();
                 休息;
    案例卡布奇诺:returnValue = new Cap_Coffee();
                 休息;
    案例摩卡:returnValue = new Mocha_Coffee();
                 休息;
    冰镇案例:returnValue = new Iced_Coffee();
                 休息;

    }
    返回返回值;
}

在我的客户中,我必须维护所有可用 Coffee 的列表。我相信没有办法了解给定基类的子类,因此我必须手动迭代所有子类并使用工厂方法来创建每个 Object 。一旦我有 50 种不同类型的咖啡(我会的),这将变得一团糟。所以每次我添加一个新类型时,我都必须将它添加到工厂中,我的客户也需要添加哪个附加项目。

有没有办法让我可以将整个逻辑转移到一个地方。所以只有工厂方法只知道附加项目,我的客户可以在工厂类本身上调用 getAllItems 并迭代它们,或者我应该让我的客户处理项目的集合(现在就是这种情况)。

4

1 回答 1

1

我处理这个问题的方法是创建一个静态 NSMutableDictionary,当你的应用程序启动时,你可以使用新的类方法注册已知的咖啡类型。类方法将对字典执行 setObject:forKey。为客户提供一些方法来注册任意数量的对象,因为他们知道每个“键”(名称)必须是唯一的。也就是说,他甚至可以使用相同的键覆盖您创建的初始项目(并替换与该类型关联的任何对象。

我会使用名称而不是数字(就像您现在所使用的那样),但是如果您想坚持使用只要您使用 NSNumber 作为字典中的键就可以使用的数字。

于 2012-07-25T00:25:21.780 回答