ios-备忘录模式

107 阅读1分钟
  • 我的理解备忘录模式就是相当于可以撤销功能吧。
    • 一个对象类拥有一些成员属性
    • 一个模型存储对象类的成员属性
    • 管理者类,里面有一个数组,或者一个字典来保存了哪个模型
  • 游戏角色类
#import <Foundation/Foundation.h>
@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

#import "HCDGameRoll.h"
#import "HCDGameState.h"
@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];

image.png