首页 > 编程语言 >Python设计模式-19-备忘录模式

Python设计模式-19-备忘录模式

时间:2023-06-16 18:57:03浏览次数:47  
标签:originator 备忘录 Python self 19 state 对象 设计模式 memento

备忘录模式是一种行为型设计模式,它允许我们在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。备忘录模式通常包括以下几个角色:

  • 发起人(Originator):定义了一个接口,用于创建备忘录对象和恢复对象状态。

  • 备忘录(Memento):存储发起人对象的内部状态。

  • 管理者(Caretaker):负责保存备忘录对象,并在需要时将其恢复到发起人对象中。

下面是一个简单的 Python 示例,演示了如何使用备忘录模式:

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

    def get_state(self):
        return self.state

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

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

    def restore_memento(self, memento):
        self.state = memento.get_state()

    def get_state(self):
        return self.state

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

class Caretaker:
    def __init__(self):
        self.mementos = []

    def add_memento(self, memento):
        self.mementos.append(memento)

    def get_memento(self, index):
        return self.mementos[index]

originator = Originator('State 1')
print(f'Originator state: {originator.get_state()}')

caretaker = Caretaker()
caretaker.add_memento(originator.create_memento())

originator.set_state('State 2')
print(f'Originator state: {originator.get_state()}')

caretaker.add_memento(originator.create_memento())

originator.set_state('State 3')
print(f'Originator state: {originator.get_state()}')

memento = caretaker.get_memento(0)
originator.restore_memento(memento)
print(f'Originator state: {originator.get_state()}')

memento = caretaker.get_memento(1)
originator.restore_memento(memento)
print(f'Originator state: {originator.get_state()}')

在上面的示例中,我们定义了一个备忘录 Memento,它存储发起人对象的内部状态。然后,我们定义了一个发起人 Originator,它定义了一个接口 create_memento()restore_memento(),用于创建备忘录对象和恢复对象状态。接下来,我们定义了一个管理者 Caretaker,它负责保存备忘录对象,并在需要时将其恢复到发起人对象中。

在使用备忘录模式时,我们可以通过创建备忘录对象来保存发起人对象的内部状态,并在需要时将其恢复到发起人对象中。在上面的示例中,我们创建了一个发起人对象 originator,并将其状态分别设置为 State 1State 2State 3。然后,我们创建了一个管理者对象 caretaker,并将发起人对象的备忘录对象保存到其中。最后,我们从管理者对象中获取备忘录对象,并将其恢复到发起人对象中,从而实现了状态的恢复。需要注意的是,备忘录模式可以帮助我们在不破坏封装性的前提下,保存和恢复对象的内部状态,从而提高代码的可维护性和可扩展性。备忘录模式还可以用于实现撤销和重做功能,因为它允许我们保存对象的历史状态,并在需要时将其恢复到先前的状态。

标签:originator,备忘录,Python,self,19,state,对象,设计模式,memento
From: https://www.cnblogs.com/superhin/p/17486320.html

相关文章

  • Python设计模式-20-迭代器模式
    迭代器模式是一种行为型设计模式,它允许我们按照顺序访问一个聚合对象中的元素,而不需要暴露该对象的内部表示。迭代器模式通常包括以下几个角色:迭代器(Iterator):定义了一个接口,用于按照顺序访问聚合对象中的元素。具体迭代器(ConcreteIterator):实现了迭代器定义的接口,并维护了当......
  • Python设计模式-21-解释器模式
    解释器模式是一种行为型设计模式,它定义了一种语言,用于解释和执行特定的任务。解释器模式通常包括以下几个角色:抽象表达式(AbstractExpression):定义了一个接口,用于解释和执行特定的任务。终结符表达式(TerminalExpression):实现了抽象表达式定义的接口,并表示语言中的终结符。......
  • Python设计模式-22-模板模式
    模板模式是一种行为型设计模式,它定义了一个算法的骨架,将一些步骤延迟到子类中实现。模板模式通常包括以下几个角色:抽象类(AbstractClass):定义了一个算法的骨架,其中包含一些抽象方法,用于延迟到子类中实现。具体类(ConcreteClass):实现了抽象类定义的接口,并实现了其中的抽象方法......
  • Python设计模式-06-代理模式
    代理模式是一种结构型设计模式,它提供了一个代理对象来控制对另一个对象的访问。代理模式通常包括以下几个角色:抽象主题(Subject):定义了代理对象和真实对象的公共接口,可以是一个抽象类或接口。真实主题(RealSubject):定义了代理对象所代表的真实对象。代理(Proxy):持有一个真实对象的......
  • Python设计模式-07-桥接模式
    桥接模式是一种结构型设计模式,它将抽象部分和实现部分分离开来,使它们可以独立地变化。桥接模式通常包括以下几个角色:抽象部分(Abstraction):定义了抽象部分的接口,并持有一个实现部分的引用。扩展抽象部分(RefinedAbstraction):扩展了抽象部分的接口,可以包含一些额外的行为。实现部......
  • Python设计模式-08-组合模式
    模式是一种结构型设计模式,它允许我们将对象组合成树形结构来表示“部分-整体”的层次结构。组合模式通常包括以下几个角色:组件(Component):定义了组合中所有对象的通用接口,可以是一个抽象类或接口。叶子节点(Leaf):表示组合中的叶子节点,它没有子节点。组合节点(Composite):表示组合中的......
  • Python设计模式-09-外观模式
    外观模式是一种结构型设计模式,它提供了一个简单的接口,隐藏了系统的复杂性,使得客户端可以更容易地使用系统。外观模式通常包括以下几个角色:外观(Facade):提供了一个简单的接口,隐藏了系统的复杂性,使得客户端可以更容易地使用系统。子系统(Subsystem):实现了系统的功能,但对客户端是不可......
  • 运行python -m uiautomator2 init报错AttributeError: module 'collections' has no a
    报错信息:Traceback(mostrecentcalllast):File"E:\Carte\BB\17-SiteLeadership\alte\IonelBalauta\Aryeht\Task1-Traducetotsite-ul\DoarGoogleWeb\Andreea\Meditatii\Sedinta9(2022)(EMAIL)\BEBE-PARSING-Python(fararedenumire2).p......
  • Python设计模式-10-享元模式
    享元模式是一种结构型设计模式,它通过共享对象来减少内存使用和对象创建的数量。享元模式通常包括以下几个角色:享元工厂(FlyweightFactory):负责创建和管理享元对象。享元(Flyweight):表示共享的对象,包含内部状态和外部状态。内部状态(IntrinsicState):存储在享元对象内部的状态,不会随......
  • Python设计模式-11-观察者模式
    观察者模式是一种行为型设计模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,当主题对象发生变化时,它会自动通知所有观察者对象,使它们能够及时更新自己的状态。观察者模式通常包括以下几个角色:主题(Subject):定义了被观察的对象,可以有多个观察者监听它。......