MST

星途 面试题库

面试题:Objective-C 中备忘录模式的基本实现

请用Objective-C代码实现一个简单的备忘录模式,包含原发器(Originator)、备忘录(Memento)和负责人(Caretaker)三个角色,要求原发器可以保存自身状态到备忘录,并能从备忘录恢复状态。
14.2万 热度难度
编程语言Objective-C

知识考点

AI 面试

面试题答案

一键面试
// Memento.h
#import <Foundation/Foundation.h>

@interface Memento : NSObject

@property (nonatomic, strong) NSString *state;

- (instancetype)initWithState:(NSString *)state;

@end

// Memento.m
#import "Memento.h"

@implementation Memento

- (instancetype)initWithState:(NSString *)state {
    self = [super init];
    if (self) {
        _state = state;
    }
    return self;
}

@end


// Originator.h
#import <Foundation/Foundation.h>
#import "Memento.h"

@interface Originator : NSObject

@property (nonatomic, strong) NSString *state;

- (Memento *)saveStateToMemento;
- (void)restoreStateFromMemento:(Memento *)memento;

@end

// Originator.m
#import "Originator.h"

@implementation Originator

- (Memento *)saveStateToMemento {
    return [[Memento alloc] initWithState:self.state];
}

- (void)restoreStateFromMemento:(Memento *)memento {
    self.state = memento.state;
}

@end


// Caretaker.h
#import <Foundation/Foundation.h>
#import "Memento.h"

@interface Caretaker : NSObject

@property (nonatomic, strong) Memento *memento;

@end

// Caretaker.m
#import "Caretaker.h"

@implementation Caretaker

@end


// 使用示例
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        Originator *originator = [[Originator alloc] init];
        originator.state = @"State1";
        
        Caretaker *caretaker = [[Caretaker alloc] init];
        caretaker.memento = [originator saveStateToMemento];
        
        originator.state = @"State2";
        
        [originator restoreStateFromMemento:caretaker.memento];
        NSLog(@"Restored state: %@", originator.state);
    }
    return 0;
}