备忘录模式
C++
# include <iostream>
# include <string>
using namespace std;
class RoleStateMemento
{
private : int m_vit; int m_atk; int m_def;
public : RoleStateMemento ( int vit, int atk, int def) : m_vit ( vit) , m_atk ( atk) , m_def ( def) { } void setVitality ( int vit) { m_vit = vit; } int getVitality ( ) { return m_vit; } void setAttack ( int atk) { m_atk = atk; } int getAttack ( ) { return m_atk; } void setDefense ( int def) { m_def = def; } int getDefense ( ) { return m_def; }
} ;
class GameRole
{
private : int m_vit; int m_atk; int m_def; public : RoleStateMemento * SaveState ( ) { return ( new RoleStateMemento ( m_vit, m_atk, m_def) ) ; } void RecoveryState ( RoleStateMemento * memento) { m_vit = memento-> getVitality ( ) ; m_atk = memento-> getAttack ( ) ; m_def = memento-> getDefense ( ) ; } void GetInitState ( ) { m_atk = m_def = m_vit = 100 ; } void Fight ( ) { m_atk = m_def = m_vit = 0 ; } void StateDisplay ( ) { cout << "角色当前状态:" << endl; cout << "体力:" << m_vit << " " << "攻击力:" << m_atk << " " << "防御力:" << m_def << endl; }
} ;
class RoleStateCaretaker
{
private : RoleStateMemento * m_memento; public : ~ RoleStateCaretaker ( ) { delete m_memento; } void setMemento ( RoleStateMemento * memento) { m_memento = memento; } RoleStateMemento * getMemento ( ) { return m_memento; }
} ;
int main ( )
{ GameRole * lixiaoyao = new GameRole; lixiaoyao-> GetInitState ( ) ; lixiaoyao-> StateDisplay ( ) ; cout << "\n大战Boss中..." << endl; RoleStateCaretaker * stateAdmin = new RoleStateCaretaker; stateAdmin-> setMemento ( lixiaoyao-> SaveState ( ) ) ; lixiaoyao-> Fight ( ) ; lixiaoyao-> StateDisplay ( ) ; cout << "\n大战Boss后,恢复进度..." << endl; lixiaoyao-> RecoveryState ( stateAdmin-> getMemento ( ) ) ; lixiaoyao-> StateDisplay ( ) ; delete lixiaoyao; delete stateAdmin; return 0 ;
}
C
# include <stdio.h>
# include <stdlib.h>
# include <string.h>
typedef struct
{ int vitality; int attack; int defense;
} RoleStateMemento;
RoleStateMemento * create_memento ( int vit, int atk, int def)
{ RoleStateMemento * memento = ( RoleStateMemento * ) malloc ( sizeof ( RoleStateMemento) ) ; memento-> vitality = vit; memento-> attack = atk; memento-> defense = def; return memento;
}
typedef struct
{ int vitality; int attack; int defense;
} GameRole;
void init_game_role ( GameRole * role)
{ role-> vitality = 100 ; role-> attack = 100 ; role-> defense = 100 ;
}
RoleStateMemento * save_state ( GameRole * role)
{ return create_memento ( role-> vitality, role-> attack, role-> defense) ;
}
void restore_state ( GameRole * role, RoleStateMemento * memento)
{ role-> vitality = memento-> vitality; role-> attack = memento-> attack; role-> defense = memento-> defense;
}
void display_state ( GameRole * role)
{ printf ( "角色当前状态:\n" ) ; printf ( "体力:%d 攻击力:%d 防御力:%d\n" , role-> vitality, role-> attack, role-> defense) ;
}
typedef struct
{ RoleStateMemento * memento;
} RoleStateCaretaker;
void caretaker_set_memento ( RoleStateCaretaker * caretaker, RoleStateMemento * memento)
{ caretaker-> memento = memento;
}
RoleStateMemento * caretaker_get_memento ( RoleStateCaretaker * caretaker)
{ return caretaker-> memento;
}
void cleanup ( GameRole * role, RoleStateCaretaker * caretaker)
{ free ( caretaker-> memento) ; free ( caretaker) ;
} int main ( )
{ GameRole lixiaoyao; RoleStateCaretaker * stateAdmin = ( RoleStateCaretaker * ) malloc ( sizeof ( RoleStateCaretaker) ) ; init_game_role ( & lixiaoyao) ; display_state ( & lixiaoyao) ; printf ( "\n大战Boss中...\n" ) ; caretaker_set_memento ( stateAdmin, save_state ( & lixiaoyao) ) ; lixiaoyao. vitality = lixiaoyao. attack = lixiaoyao. defense = 0 ; display_state ( & lixiaoyao) ; printf ( "\n大战Boss后,恢复进度...\n" ) ; restore_state ( & lixiaoyao, caretaker_get_memento ( stateAdmin) ) ; display_state ( & lixiaoyao) ; cleanup ( & lixiaoyao, stateAdmin) ; return 0 ;
}