备忘录模式

有事情记录到备份录内,后续可以调出备忘录处理

package main


import "log"

// Memento
// 有事情记录到备份录内
// 后续可以调出备忘录处理
// 有点儿中间临时变量的意思

type Memento struct {
    state int
}

func NewMemento(value int) *Memento {
    return &Memento{state: value}
}

func (m *Memento) Value() int {
    return m.state
}

type Number struct {
    value int
}

func NewNumber(value int) *Number {
    return &Number{value: value}
}

func (n *Number) Double() {
    n.value = n.value * 2


}

func (n *Number) Half() {
    n.value = n.value / 2
}

func (n *Number) Value() int {
    return n.value
}

// 创建值的备忘录
func (n *Number) CreateMemento() *Memento {
    return NewMemento(n.value)
}

func (n *Number) ReinstanceMemento(memento *Memento) {
    n.value = memento.Value()
}


func main() {
    num := NewNumber(100)

    log.Println("number init value = ", num.Value())

    // 修改值前创建备忘录
    mem := num.CreateMemento()

    // 开始修改值
    num.Double()
    log.Println("number double value = ", num.Value())

    // 还原值
    num.ReinstanceMemento(mem)
    log.Println("number original value = ", num.Value())
}

已发布

分类

来自

标签:

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注