- 我的理解备忘录模式就是相当于可以撤销功能吧。
- 一个对象类拥有一些成员属性
- 一个模型存储对象类的成员属性
- 管理者类,里面有一个数组,或者一个字典来保存了哪个模型
- 游戏角色类
@class HCDGameState
@interface HCDGameRoll : NSObject
@property(nonatomic,assign)NSInteger life
@property(nonatomic,assign)NSInteger attack
@property(nonatomic,assign)NSInteger defeat
-(void)getState
-(HCDGameState *)saveState
-(void)fightBoss
-(void)rebackState:(HCDGameState *)state
@end
@implementation HCDGameRoll
-(instancetype)init{
self = [super init]
if (self) {
_life = 100
_attack = 100
_defeat = 100
}
return self
}
-(void)getState{
NSLog(@"生命力%ld,防御力%ld,攻击力%ld",self.life,self.defeat,self.attack)
}
-(HCDGameState *)saveState{
HCDGameState *state = [[HCDGameState alloc]init]
state.life = self.life
state.defeat = self.defeat
state.attack = self.attack
return state
}
-(void)rebackState:(HCDGameState *)state{
self.life = state.life
self.defeat = state.defeat
self.attack = state.attack
}
-(void)fightBoss{
self.life = 0
self.defeat = 0
self.attack = 0
}
@end
#import <Foundation/Foundation.h>
@interface HCDGameState : NSObject
@property(nonatomic,assign)NSInteger life;
@property(nonatomic,assign)NSInteger attack;
@property(nonatomic,assign)NSInteger defeat;
@end
#import "HCDGameState.h"
@implementation HCDGameState
@end
#import <Foundation/Foundation.h>
@class HCDGameState;
@interface HCDStateManager : NSObject
@property(nonatomic,strong)HCDGameState *gameState;
-(instancetype)initWithGameState:(HCDGameState *)gameState;
@end
#import "HCDStateManager.h"
@implementation HCDStateManager
-(instancetype)initWithGameState:(HCDGameState *)gameState{
self = [super init];
if (self) {
_gameState = gameState;
}
return self;
}
@end
//游戏角色类创建一个实例对象,对象有些成员属性,并初始化成员变量
HCDGameRoll *roll = [[HCDGameRoll alloc]init]
//获取实例对象的成员信息打印
[roll getState]
//模型类把游戏实例对象的成员属性的值获取给自己,成为了一个实例对象
HCDGameState *state = [roll saveState]
//管理类初始化并保存了第一个模型类
HCDStateManager *manager = [[HCDStateManager alloc]initWithGameState:state]
//角色开始游戏打boss死了
[roll fightBoss]
//获取状态死了
[roll getState]
//游戏角色复活从管理类中取出放在里面的模型类,赋值给自己的成员变量
[roll rebackState:manager.gameState]
//获取状态复活了
[roll getState]
