memento.go

最后更新于:2022-04-02 04:50:10

~~~ /* Memento 备忘录模式: 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。 这样以后就可以将该对象恢复到原先保存的状态 个人想法:将某个类的状态(某些状态,具体有该类决定)保存在另外一个类中 (代码级别:提供一个函数能够将状态保存起来,返回出去),保存好状态的类对象是管理类的成员, 原来的类需要恢复时,再从管理类中获取原来的状态 作者: HCLAC 日期: 20170309 */ package memento import ( "fmt" ) type GameRole struct { vit int atk int def int } func (g *GameRole) StateDisplay() { if g == nil { return } fmt.Println("角色当前状态:") fmt.Println("体力:", g.vit) fmt.Println("攻击:", g.atk) fmt.Println("防御:", g.def) fmt.Println("============") } func (g *GameRole) GetInitState() { if g == nil { return } g.vit = 100 g.atk = 100 g.def = 100 } func (g *GameRole) Fight() { if g == nil { return } g.vit = 0 g.atk = 0 g.def = 0 } func (g *GameRole) SaveState() RoleStateMemento { if g == nil { return RoleStateMemento{} } return RoleStateMemento{*g} } func (g *GameRole) RecoveryState(r RoleStateMemento) { if g == nil { return } g.vit = r.vit g.atk = r.atk g.def = r.def } type RoleStateMemento struct { GameRole } type RoleStateCaretaker struct { memento RoleStateMemento } ~~~
';