MST

星途 面试题库

面试题:Objective-C类初始化的设计模式

请阐述在Objective-C类初始化过程中,如何运用工厂模式来创建对象。以一个自定义`Person`类为例,实现一个基于工厂模式的初始化方式,并说明其相较于常规初始化方法的优势。
26.3万 热度难度
编程语言Objective-C

知识考点

AI 面试

面试题答案

一键面试

1. 基于工厂模式在Objective-C中创建Person类对象

  1. 定义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
  1. 使用工厂方法创建对象
#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. 工厂模式相较于常规初始化方法的优势

  • 代码简洁:常规初始化可能需要先allocinit并分别设置属性,工厂模式通过一个方法完成对象创建与属性设置,使代码更简洁,如[Person personWithName:@"John" age:30] 对比先Person *person = [[Person alloc] init]; person.name = @"John"; person.age = 30;
  • 对象创建逻辑封装:工厂方法封装了对象创建的具体逻辑,调用者无需关心对象创建的细节,比如对象的内存分配等,提高了代码的可维护性和可复用性。如果对象创建逻辑发生变化,只需在工厂方法中修改,调用处无需改动。
  • 便于创建不同类型对象:在工厂模式基础上可轻松扩展创建不同类型的Person相关对象(如Student类继承自Person,工厂方法可根据条件返回Student对象),而常规初始化不利于这种灵活的对象创建扩展。