面试题答案
一键面试设计模式
- 观察者模式:在这种场景下非常适用。智能家居设备作为被观察对象(Subject),应用界面作为观察者(Observer)。当设备状态变化时,被观察对象通知所有注册的观察者,让它们更新自己的状态。
具体实现思路
- 定义协议:
@protocol HomeKitDeviceObserver <NSObject> - (void)deviceStateDidChange:(id)newState; @end
- 智能家居设备类:
@interface HomeKitDevice : NSObject @property (nonatomic, strong) id currentState; @property (nonatomic, strong) NSMutableArray<id<HomeKitDeviceObserver>> *observers; - (void)addObserver:(id<HomeKitDeviceObserver>)observer; - (void)removeObserver:(id<HomeKitDeviceObserver>)observer; - (void)notifyObservers; @end @implementation HomeKitDevice - (instancetype)init { self = [super init]; if (self) { _observers = [NSMutableArray array]; } return self; } - (void)addObserver:(id<HomeKitDeviceObserver>)observer { [self.observers addObject:observer]; } - (void)removeObserver:(id<HomeKitDeviceObserver>)observer { [self.observers removeObject:observer]; } - (void)notifyObservers { for (id<HomeKitDeviceObserver> observer in self.observers) { [observer deviceStateDidChange:self.currentState]; } } @end
- 应用界面相关类(如ViewController):
@interface HomeKitViewController : UIViewController <HomeKitDeviceObserver> @property (nonatomic, strong) HomeKitDevice *homeKitDevice; - (void)viewDidLoad { [super viewDidLoad]; self.homeKitDevice = [[HomeKitDevice alloc] init]; [self.homeKitDevice addObserver:self]; } - (void)deviceStateDidChange:(id)newState { // 在这里更新界面展示的设备状态,例如更新UI元素 NSLog(@"更新界面展示的设备状态: %@", newState); } @end
- 模拟设备状态变化:
// 在某个地方改变设备状态并通知观察者 HomeKitDevice *device = [[HomeKitDevice alloc] init]; device.currentState = @{@"lightStatus": @"on", @"temperature": @25}; [device notifyObservers];
通过以上步骤,利用观察者模式实现了智能家居设备状态变化时应用界面的实时更新。