设计模式(二十)备忘录模式(Memento)

设计模式(二十)备忘录模式(Memento)_第1张图片
备忘录.png

思想:将原先的状态进行保存,便于恢复
意图:
在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。

适用性:
必须保存一个对象在某一个时刻的(部分)状态, 这样以后需要时它才能恢复到先前的状态。
如果一个用接口来让其它对象直接得到这些状态,将会暴露对象的实现细节并破坏对象的封装性。

案例一:

"""
备忘录模式(Memento Pattern):不破坏封装性的前提下捕获一个对象的内部状态,并在该对象之外保存
这个状态,这样已经后就可将该对象恢复到原先保存的状态
"""

# 发起人类
class Originator(object):

    def __init__(self, state):
        self.state = state

    def create_memento(self):
        return Memento(self.state)

    def set_memento(self, memento):
        self.state = memento.state

    def show(self):
        print "当前状态 ", self.state

# 备忘录类
class Memento(object):

    def __init__(self, state):
        self.state = state

# 管理者类
class Caretaker(object):

    def __init__(self,memento):
        self.memento = memento


if __name__ == "__main__":
    # 初始状态
    originator = Originator(state='On')
    originator.show()
    # 备忘录
    caretaker = Caretaker(originator.create_memento())
    # 修改状态
    originator.state = 'Off'
    originator.show()
    # 复原状态
    originator.set_memento(caretaker.memento)
    originator.show()

你可能感兴趣的:(设计模式(二十)备忘录模式(Memento))