python版本的备忘录模式

# -*- coding:UTF-8 -*-
class Originator:
    def __init__(self):
        self.__state = None

    @property
    def state(self):
        return self.__state

    @state.setter
    def state(self, value):
        self.__state = value

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

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

    def show(self):
        print("State=%s" % self.__state)

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

    @property
    def state(self):
        return self.__state

class Caretaker:
    def __init__(self):
        self.__memento = None

    @property
    def memento(self):
        return self.__memento

    @memento.setter
    def memento(self,value):
        self.__memento = value

if __name__=="__main__":
    o = Originator()
    o.state = "On"
    o.show()

    c = Caretaker()
    c.memento = o.create_memento()

    o.state = "Off"
    o.show()

    o.set_memento(c.memento)
    o.show()

原文地址:https://www.cnblogs.com/gjinwei/p/8350770.html

时间: 2024-11-18 13:33:05

python版本的备忘录模式的相关文章

python版本的命令模式

# -*- coding:UTF-8 -*- import abc class Command(metaclass=abc.ABCMeta): def __init__(self, receiver): self._receiver = receiver @abc.abstractmethod def execute(self): pass class ConcreteCommand(Command): def execute(self): self._receiver.action() cla

python版本的策略模式

# -*- coding:UTF-8 -*- import abc class Strategy(metaclass=abc.ABCMeta): @abc.abstractmethod def algorithm_interface(self): pass class ConcreteStrategyA(Strategy): def algorithm_interface(self): print('算法A实现') class ConcreteStrategyB(Strategy): def a

[Python设计模式] 第18章 游戏角色备份——备忘录模式

github地址:https://github.com/cheesezh/python_design_patterns 题目 用代码模拟以下场景,一个游戏角色有生命力,攻击力,防御力等数据,在打Boss前后的数据值会发生变化,如果玩家挑战Boss失败,我们允许玩家可以将游戏数据恢复到与Boss决斗之前的状态. 基础版本 class GameRole(): def __init__(self): self.vitality = 0 self.attack = 0 self.defense = 0

设计模式之行为型模式—— 3.7 备忘录模式

<?php /**  * 3.7 备忘录模式  *  定义:  *  在不破坏封装性的前提下,捕获一个对象的内  *  部状态,并在该对象之外保存这个状态,这样  *  以后就可将该对象恢复到原先保存的状态.  *  * 角色:  *  1. 发起人(Originator)类  *  职责:负责创建一个备忘录Memento,用以  *    记录当前时刻它的内部状态,并可  *    使用备忘录恢复内部状态.Originator  *    可根据需要决定Memento存储它的哪  *    些

设计模式之备忘录模式(Memento)摘录

23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而一个对象创建型模式将实例化委托给另一个对象.创建型模式有两个不断出现的主旋律.第一,它们都将关于该系统使用哪些具体的类的信息封装起来.第二,它们隐藏了这些类的实例是如何被创建和放在一起的.整个系统关于这些对象所知道的是由抽象类所定义的接口.因此,创建型模式在什么被创建,谁创建它,它是怎样被创建的,以

备忘录模式之备份是一种态度

有些事,错误了就是永远:有些人,一转身就是一辈子,不要轻易忽略任何爱,哪怕只是前天母亲节一通平凡的电话:时光走着她的路,路过青春的脚步,每个人或许都有遗憾的时候,总是要等到睡觉前,才知道功课只做了一点点 总是要等到考试后,才知道该念的书都没有念,为了让自己的人生少些许遗憾,需要我们做好时间管理,提前做好准备,认真思量之后再做打算. 但是在神奇的编程世界中,有一种魔法,可以让你避免很多遗憾,强大的word中具有"Ctrl+Z"的功能,PS等一些软件中,也具有此类功能,基本上所有的带编辑功

Wing IDE 如何设置 python版本

机器上同时装了Python3和Python2,使用Wing IDE, 因为Python2和3是有很大的区别的,所以时不时的需要更改IDE使用的Python版本,下面介绍方法: 1.打开Edit标签下的Configure Python...,如下图设置所用的,Python版本安装的目录即可 (Python Executable 和 Python Path 这个两个) 2.若使用默认的版本,再改回Use default 模式即可 版权声明:本文为博主原创文章,未经博主允许不得转载.

说说Python的装饰器模式与面向切面编程

说说Python的装饰器模式与面向切面编程 今天来讨论一下装饰器.装饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志.性能测试.事务处理等.装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量函数中与函数功能本身无关的雷同代码并继续重用.概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能. 1. 装饰器入门 1.1. 需求是怎么来的? 装饰器的定义很是抽象,我们来看一个小例子. //edit http://www.lai18.com //date 2

在CentOS 7.2下安装Hyperledger fabric 1.0.0 preview版本的solo模式

在CentOS 7.2下安装Hyperledger fabric 1.0.0 preview版本的solo模式 一. 安装centos和docker 等组件 A. 安装centos x86-64 Minimal(IP:192.168.2.10) 内核版本需要3.10 以上.centos 7 完全支持. 查看内核信息 $ uname -a Linux localhost.localdomain 3.10.0-514.6.1.el7.x86_64 B. 安装docker, 版本1.12.5(略过)