Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 正在Cocoa中获取输入对象…什么';什么样的风格更好?_Objective C_Cocoa - Fatal编程技术网

Objective c 正在Cocoa中获取输入对象…什么';什么样的风格更好?

Objective c 正在Cocoa中获取输入对象…什么';什么样的风格更好?,objective-c,cocoa,Objective C,Cocoa,我有一个factory类型的类,它根据另一个对象的特性创建产品。这意味着我需要在某处引用输入对象。我计划: A) 将输入对象定义为属性,并在自定义init方法中进行设置。因此,工厂的所有者调用“initWithObject:”,然后调用“createProduct” B) 定义工厂的创建方法,以便它们接受输入对象作为参数。因此,工厂的所有者通常初始化,然后调用“createProductWithObject:” 在所有其他条件相同的情况下,从总体设计角度来看,这些方法中的一种比另一种更可取吗?方

我有一个factory类型的类,它根据另一个对象的特性创建产品。这意味着我需要在某处引用输入对象。我计划:

A) 将输入对象定义为属性,并在自定义init方法中进行设置。因此,工厂的所有者调用“initWithObject:”,然后调用“createProduct”

B) 定义工厂的创建方法,以便它们接受输入对象作为参数。因此,工厂的所有者通常初始化,然后调用“createProductWithObject:”

在所有其他条件相同的情况下,从总体设计角度来看,这些方法中的一种比另一种更可取吗?方法A使事情对我来说更简单,因为我不必让每个方法都接受输入,但我想确保我没有忽略任何东西


谢谢

我认为这完全取决于您打算如何使用factory类。如果这是一家比萨饼工厂,您可能希望在所有比萨饼(产品)的样式取决于初始值的场景中使用选项a

PizzaFactory *factory = [[PizzaFactory alloc] initWithStyle:NewYorkStylePizza];
另一方面,单个比萨饼可以依赖于同一工厂的其他比萨饼所不依赖的东西

Pizza *meatLovers = [factory createPizzaWithToppings:toppings];

在这种情况下,两个选项都被使用。您只需要决定什么最适合您的需要。

我根据类是否必须具有属性值或是否可以不具有属性值来选择要执行的操作

借用Cory Kilger关于食物的例子,让我们考虑一个汉堡类。实例必须有一个小面包和一个肉饼:

Patty *patty = [BeefPatty patty];
Bun *bun = [WhiteBun bun];
Hamburger *burger = [Hamburger burgerWithSinglePatty:patty bun:bun];
//Instantiation without convenience factory method
Hamburger *burger = [[[Hamburger alloc] initWithSinglePatty:patty bun:bun] autorelease];
但可以有任意数量的浇头:

[burger addToppingsObject:[LeafLettuce lettuce]];
[burger addToppingsObject:[TomatoSlice sliceWithThickness:1.0 /*cm*/]];
[burger addToppingsObject:[CheddarCheese slice]];
或者根本没有:

//No toppings—just meat in a bun.
牛排没有任何必需的元素,因此您可以不带参数地实例化它:

Steak *steak = [NewYorkSteak steak];
//Instantiation without convenience factory method
Steak *steak = [[[NewYorkSteak alloc] init] autorelease];
但是,如果需要,可以为可选元素添加值:

steak.sauce = [userSelectedSauce sauceInAmount:2.0 /*ml*/];