Objective-C 架构设计面试题解析与代码实现
在 Objective-C 面试中,架构设计是一个非常重要的考察点。一个优秀的架构设计能够提高代码的可维护性、可扩展性和性能。本文将围绕 Objective-C 语言架构设计,解析一些常见的面试题,并提供相应的代码实现。
1. 单例模式
单例模式是 Objective-C 中最常用的设计模式之一,用于确保一个类只有一个实例,并提供一个全局访问点。
面试题
请实现一个单例类,该类具有一个初始化方法,用于设置一个属性值。
代码实现
objective-c
@interface Singleton : NSObject
@property (nonatomic, strong) NSString value;
+ (instancetype)sharedInstance;
@end
@implementation Singleton
+ (instancetype)sharedInstance {
static Singleton instance = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
instance = [[self alloc] init];
});
return instance;
}
- (instancetype)init {
self = [super init];
if (self) {
_value = @"Initial Value";
}
return self;
}
@end
2. 观察者模式
观察者模式允许对象在状态变化时通知其他对象,从而实现对象之间的解耦。
面试题
请实现一个观察者模式,其中有一个主题类和一个观察者类。主题类在状态变化时通知观察者。
代码实现
objective-c
@interface Subject : NSObject
@property (nonatomic, strong) NSArray<ObserverProtocol > observers;
- (void)notifyObservers;
@end
@implementation Subject
- (void)notifyObservers {
for (ObserverProtocol observer in self.observers) {
[observer update:self];
}
}
@end
@protocol ObserverProtocol <NSObject>
- (void)update:(Subject )subject;
@end
@interface ConcreteObserver : NSObject <ObserverProtocol>
@end
@implementation ConcreteObserver
- (void)update:(Subject )subject {
// 处理主题状态变化
}
@end
3. 命令模式
命令模式将请求封装为一个对象,从而允许用户使用不同的请求、队列或日志请求,以及支持可撤销的操作。
面试题
请实现一个命令模式,其中有一个命令接口和一个具体命令类。
代码实现
objective-c
@protocol Command <NSObject>
- (void)execute;
@end
@interface ConcreteCommand : NSObject <Command>
@property (nonatomic, strong) Receiver receiver;
- (instancetype)initWithReceiver:(Receiver )receiver;
@end
@implementation ConcreteCommand
- (instancetype)initWithReceiver:(Receiver )receiver {
self = [super init];
if (self) {
_receiver = receiver;
}
return self;
}
- (void)execute {
[_receiver action];
}
@end
@interface Receiver : NSObject
- (void)action;
@end
@implementation Receiver
- (void)action {
// 执行请求
}
@end
4. 策略模式
策略模式定义了一系列算法,并将每一个算法封装起来,使它们可以互相替换。
面试题
请实现一个策略模式,其中有一个策略接口和多个具体策略类。
代码实现
objective-c
@protocol Strategy <NSObject>
- (void)execute;
@end
@interface ConcreteStrategyA : NSObject <Strategy>
@end
@implementation ConcreteStrategyA
- (void)execute {
// 实现策略A
}
@end
@interface ConcreteStrategyB : NSObject <Strategy>
@end
@implementation ConcreteStrategyB
- (void)execute {
// 实现策略B
}
@end
@interface Context : NSObject
@property (nonatomic, strong) Strategy strategy;
- (void)setStrategy:(Strategy )strategy;
- (void)executeStrategy;
@end
@implementation Context
- (void)setStrategy:(Strategy )strategy {
_strategy = strategy;
}
- (void)executeStrategy {
[_strategy execute];
}
@end
5. 工厂模式
工厂模式用于创建对象,而不直接指定对象的具体类。
面试题
请实现一个工厂模式,其中有一个工厂接口和多个具体工厂类。
代码实现
objective-c
@protocol Factory <NSObject>
- (instancetype)createProduct;
@end
@interface ConcreteFactoryA : NSObject <Factory>
@end
@implementation ConcreteFactoryA
- (instancetype)createProduct {
return [[ConcreteProductA alloc] init];
}
@end
@interface ConcreteFactoryB : NSObject <Factory>
@end
@implementation ConcreteFactoryB
- (instancetype)createProduct {
return [[ConcreteProductB alloc] init];
}
@end
@interface Product : NSObject
@end
@interface ConcreteProductA : Product
@end
@interface ConcreteProductB : Product
@end
总结
本文通过解析和代码实现,展示了 Objective-C 中常见的架构设计模式。掌握这些模式对于面试和实际开发都具有重要意义。在实际项目中,应根据具体需求选择合适的架构模式,以提高代码质量和开发效率。
Comments NOTHING