Python: Memento Pattern

GeovinDuMemento.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# 备忘录模式 Memento  Pattern  GeovinDuMemento.py
#
 
class Memento:
    def __init__(self, value):
        self.state = value
 
    def SetState(self, value):
        self.state = value
 
    def GetState(self):
        return self.state
 
 
class Originator:
    def SetState(self, value):
        self.state = value
 
    def GetState(self):
        return self.state
 
    def CreateMemento(self):
        return Memento(self.state)
 
    def SetMemento(self, memento):
        print("返回上一状态.")
        self.state = memento.GetState()
 
 
class Caretaker:
    def __init__(self, originatorObj):
        self.memento = None
        self.origin = originatorObj
 
    def Execute(self):
        self.memento = self.origin.CreateMemento()
        self.origin.SetState(0)
 
    def Unexecute(self):
        self.origin.SetMemento(self.memento)

  

main.py 调用

1
2
3
4
5
6
7
8
9
10
11
12
13
# 备忘录模式 Memento  Pattern
 
originator = GeovinDuMemento.Originator()
originator.SetState(1)
 
print("状态值为: ", originator.GetState())
 
caretaker = GeovinDuMemento.Caretaker(originator)
caretaker.Execute()
print("状态值为: ", originator.GetState())
 
caretaker.Unexecute()
print("状态值为: ", originator.GetState())

  

输出:

1
2
3
4
状态值为:  1
状态值为:  0
返回上一状态.
状态值为:  1

  

posted @   ®Geovin Du Dream Park™  阅读(63)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
历史上的今天:
2016-10-27 Concurrency in csharp (Asynchronous, Parallel, and Multithreaded Programming)
2015-10-27 csharp: InvokeHelper
2015-10-27 Free Slideshow, Gallery And Lightboxes Scripts
2015-10-27 35 Gallery – Ajax Slide
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示