美文网首页
设计模式(二十)备忘录模式(Memento)

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

作者: 一杯海风_3163 | 来源:发表于2018-02-06 11:00 被阅读0次
    备忘录.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)

          本文链接:https://www.haomeiwen.com/subject/uxzwzxtx.html