Objective-C中工厂方法的语法和用法是什么

fs_*_*gre 3 objective-c factory-pattern ios

我一直在网上试图了解工厂方法是什么,但我没有找到任何显示具体例子的简单例子.我简要介绍了其中一本书,但它没有展示一个例子,也没有解释它们是什么"类方法通常用作工厂方法".

1- Objective-C中工厂方法的语法和用法是什么? 是我找到的最接近的答案,但是当我在评论中尝试这个例子作为答案时,我收到一条消息说我不能打电话给超级.在这个问题中,我更关注工厂方法的实现语法.

2-工厂方法在其他语言中是什么叫做构造函数?

3-工厂方法与单身人士相比如何?

来自Apple文档:

它们在一个步骤中组合分配和初始化,并返回创建的对象

单身人士不是吗?

在下面的单例示例中,我们可以说类方法sharedData是一个工厂方法吗?

.m文件

#import "SingletonModel.h"
@implementation SingletonModel
static SingletonModel *sharedData;

- (id) init {
    if (self = [super init]) {
        // custom initialization
    }
    return self;
}

 // is this a factory method?
+(SingletonModel*) sharedData
{
    if (!sharedData) {
        sharedData = [[SingletonModel alloc]init];
    }
    return sharedData;
}
@end
Run Code Online (Sandbox Code Playgroud)

gna*_*729 5

人们可以对不同的事物使用相同的术语.通常通过调用创建一个对象

MyClass* object = [[MyClass alloc] initWithParameters... ];
Run Code Online (Sandbox Code Playgroud)

你知道你得到了MyClass类的一个对象(在Objective C中并不完全正确,但主要是).现在让我们说MyClass有几个子类.作为调用者,您不知道也不关心这些子类.如果object是MySubClass类,你就不会知道也不会关心.但MyClass的实施者关心.他或她创建了可以更好地用于不同目的的子类.所以他创建了一个工厂方法,你可以这样称呼它:

MyClass* object = [MyClass objectForParameters:... ];
Run Code Online (Sandbox Code Playgroud)

类方法objectForParameters查看参数并决定返回哪种对象.代码可能看起来像

if (...)
    return [[MySubClass1 alloc] initWithParameters:...];
else if (...)
    return [[MySubClass2 alloc] initWithParameters:...];
else
    return [[MySubClass3 alloc] initWithParameters:...];
Run Code Online (Sandbox Code Playgroud)

你不知道你得到了什么样的对象,但是你知道你可以将它视为属于MyClass类.这种方法通常被称为"工厂方法".这是一个为您制作物品的工厂.决定你得到哪种对象,而不是你.