65 lines
1.3 KiB
Go
65 lines
1.3 KiB
Go
|
package main
|
||
|
|
||
|
import "fmt"
|
||
|
|
||
|
// 发起人
|
||
|
type Originator struct {
|
||
|
state string // 这里就简单一点,要保存的状态就是一个字符串
|
||
|
}
|
||
|
|
||
|
func (o *Originator) SetState(s string) {
|
||
|
o.state = s
|
||
|
}
|
||
|
|
||
|
func (o *Originator) GetState() string {
|
||
|
return o.state
|
||
|
}
|
||
|
|
||
|
func (o *Originator) CreateMemento() *Memento {
|
||
|
return &Memento{state: o.state}
|
||
|
}
|
||
|
|
||
|
// 备忘录
|
||
|
type Memento struct {
|
||
|
state string // 这里就是保存的状态
|
||
|
}
|
||
|
|
||
|
func (m *Memento) SetState(s string) {
|
||
|
m.state = s
|
||
|
}
|
||
|
|
||
|
func (m *Memento) GetState() string {
|
||
|
return m.state
|
||
|
}
|
||
|
|
||
|
// 负责人
|
||
|
type Caretaker struct {
|
||
|
memento *Memento
|
||
|
}
|
||
|
|
||
|
func (c *Caretaker) GetMemento() *Memento {
|
||
|
return c.memento
|
||
|
}
|
||
|
|
||
|
func (c *Caretaker) SetMemento(m *Memento) {
|
||
|
c.memento = m
|
||
|
}
|
||
|
|
||
|
func main() {
|
||
|
// 创建一个发起人并设置初始状态
|
||
|
// 此时与备忘录模式无关,只是模拟正常程序运行
|
||
|
o := &Originator{state: "hello"}
|
||
|
fmt.Println("当前状态:",o.GetState())
|
||
|
// 现在需要保存当前状态
|
||
|
// 就创建一个负责人来设置(一般来说,对于一个对象的同一个备忘范围,应当只有一个负责人,这样方便做多状态多备忘管理)
|
||
|
c := new(Caretaker)
|
||
|
c.SetMemento(o.CreateMemento())
|
||
|
|
||
|
o.SetState("world")
|
||
|
fmt.Println("更改当前状态:",o.GetState())
|
||
|
|
||
|
// 恢复备忘
|
||
|
o.SetState(c.GetMemento().GetState())
|
||
|
fmt.Println("恢复后状态",o.GetState())
|
||
|
}
|