// 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;
}