1. 基于工厂模式在Objective-C中创建Person
类对象
- 定义
Person
类
#import <Foundation/Foundation.h>
@interface Person : NSObject
@property (nonatomic, strong) NSString *name;
@property (nonatomic, assign) NSInteger age;
+ (instancetype)personWithName:(NSString *)name age:(NSInteger)age;
@end
@implementation Person
+ (instancetype)personWithName:(NSString *)name age:(NSInteger)age {
Person *person = [[self alloc] init];
person.name = name;
person.age = age;
return person;
}
@end
- 使用工厂方法创建对象
#import <Foundation/Foundation.h>
#import "Person.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
Person *person = [Person personWithName:@"John" age:30];
NSLog(@"Name: %@, Age: %ld", person.name, (long)person.age);
}
return 0;
}
2. 工厂模式相较于常规初始化方法的优势
- 代码简洁:常规初始化可能需要先
alloc
再init
并分别设置属性,工厂模式通过一个方法完成对象创建与属性设置,使代码更简洁,如[Person personWithName:@"John" age:30]
对比先Person *person = [[Person alloc] init]; person.name = @"John"; person.age = 30;
。
- 对象创建逻辑封装:工厂方法封装了对象创建的具体逻辑,调用者无需关心对象创建的细节,比如对象的内存分配等,提高了代码的可维护性和可复用性。如果对象创建逻辑发生变化,只需在工厂方法中修改,调用处无需改动。
- 便于创建不同类型对象:在工厂模式基础上可轻松扩展创建不同类型的
Person
相关对象(如Student
类继承自Person
,工厂方法可根据条件返回Student
对象),而常规初始化不利于这种灵活的对象创建扩展。