关于设计模式:设计模式备忘录Memento模式

2次阅读

共计 849 个字符,预计需要花费 3 分钟才能阅读完成。

模式定义

在不毁坏封装性的前提下,捕捉一个对象的外部状态,并在该对象之外保留这个状态,这样当前就能够将该对象复原到原先保留的状态

类图

要点总结

  • 备忘录(Memento)存储原发器(Originator)对象的外部状态,在须要时复原原发器状态
  • Memento 模式的外围是信息暗藏,即 Originator 须要向外界暗藏信息,放弃其封装性,但同时又须要将状态放弃到外界(Memento)

Go 语言代码实现

工程目录

memento.go

package Memento

type Memento struct {state int}

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

type Number struct {value int}

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

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

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

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

func (n *Number) CreateMemento() *Memento{return NewMemento(n.value)
}

func (n *Number) SetMemento(memento *Memento){n.value = memento.state}

memento_test.go

package Memento

import (
   "fmt"
   "testing"
)

func TestNumber_SetMemento(t *testing.T) {n := NewNumber(7)
   n.Double()
   n.Double()
   memento := n.CreateMemento() // 记录以后时刻的值
   n.Half()
   n.SetMemento(memento) // 拿出过后记录的值
   fmt.Println(n.value)
}
正文完
 0