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