我正在为有 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 并迭代它们,或者我应该让我的客户处理项目的集合(现在就是这种情况)。