发起人

python 设计模式之备忘录模式

谁都会走 提交于 2020-02-22 21:04:14
1.为什么用备忘录模式 假设大战僵尸游戏共10关,越是往后关卡越难,越难就越是费时间费钱费精力。 开始大战僵尸,玩了好久好久终于玩到了第9关,真是不容易。 这个时候开始玩第9关了,哇,好难啊,真不幸,输掉了。 好沮丧,只能从第一关再来一轮了。 要是第9关玩输了以后,直接再从第9关开始玩,而不是从头再来。那该多好呀,会省不少时间的。 那能不能把玩到第9关这个游戏进度给保存下来 能 用备忘录模式 2. 定义 : 在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。 在备忘录模式中,如果要保存的状态多,可以创造一个备忘录管理者角色来管理备忘录 3.备忘录模式的优点 1、有时一些发起人对象的内部信息必须保存在发起人对象以外的地方,但是必须要由发起人对象自己读取,这时, 使用备忘录模式可以把复杂的发起人内部信息对其他的对象屏蔽起来,从而可以恰当地保持封装的边界。 2、本模式简化了发起人类。发起人不再需要管理和保存其内部状态的一个个版本,客户端可以自行管理他们所需 要的这些状态的版本。 3、当发起人角色的状态改变的时候,有可能这个状态无效,这时候就可以使用暂时存储起来的备忘录将状态复原。 4.备忘录模式的缺点: 1、如果发起人角色的状态需要完整地存储到备忘录对象中,那么在资源消耗上面备忘录对象会很昂贵。 2

C#设计模式学习笔记:(22)备忘录模式

给你一囗甜甜゛ 提交于 2020-02-22 17:16:37
本笔记摘抄自: https://www.cnblogs.com/PatrickLiu/p/8176974.html ,记录一下学习过程以备后续查用。 一、引言 今天我们要讲行为型设计模式的第十个模式--备忘录模式,先从名称上来看。备忘录模式可以理解为对某个对象的状态进行保存,等到需要恢复的时 候,可以从备忘录中进行恢复。生活中这样的例子也能经常看到,如备份电话通讯录、操作系统、数据库等。如果我们想恢复对象的状态,那么我们可 能首先想到的是把对象保存下来,但是这样会破坏对象的封装性。因为对象有状态有操作,如果我们为了保存状态而留着原来的对象,做一个深拷贝, 那么其它对象也能通过这个对象的接口来访问这个对象状态,这并不是我们所希望的。我们需要它的职责只是保存和恢复对象状态,而不应在上面支持 对对象状态访问的接口,这就产生了Memento模式。 看上图,一个对象会有很多状态。这些状态会相互转变而促进对象的发展,如果要想在某一时刻把当前对象恢复到以前某一时刻的状态,这个情况用 “备忘录模式”就能很好解决。 二、备忘录模式介绍 备忘录模式:英文名称--Memento Pattern;分类--行为型。 二、备忘录模式的详细介绍 2.1、动机(Motivate) 在软件构建过程中,某些对象的状态在转换的过程中,可能由于某种需要,要求程序能够回溯到对象之前处于某个点时的状态。如果使用一些公有接

Activiti中的流程历史保存流程发起人的方法

寵の児 提交于 2019-12-22 01:34:26
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> Activiti中流程的历史信息保存在ACT_HI_ACTINST表中,流程历史信息保存在ACT_HI_PROCINST表中,我们可以通过API或者直接写SQL进行查询,但是这里面并没有流程发起人的信息,流程发起人信息有的时候还是非常必要的,比如查询某人发起的流程或者做相关的统计等。 鉴于ACT_HI_ACTINST中保存了流程的活动历史信息,我们还是想在这个表上做文章,但是这个表中并没有发起人等相关的字段,这时候,我们发现,当一个流程刚发起时,ACT_TYPE_为startEvent,这时ASSIGNEE_为空,如果我们能借用这个字段,保存申请人,查询起来代码还是比较优雅的,虽然这个字段本身的含义不是申请人。 另外,ACT_HI_PROCINST表中还有一个START_USER_ID_字段,但是默认为空。通过上述两种保存流程发起人的方式,在不同的场景中都能够通过简单的方式查询到流程的发起人信息。 下一步,就是研究Activiti的代码了,看看能不能找到相应的扩展点,解决这个问题。 经过研究,找到了扩展点,开发起来还是比较方便的,下面进行详细描述,注意,本文的开发基于Activiti5.15.1版本,大体扫了下代码,更新的5.17版本应该也兼容,但未经过测试。 对于流程发起时保存ACT_HI

备忘录(Memento)模式

大憨熊 提交于 2019-12-01 07:52:59
  备忘录模式又叫做快照模式或者Token模式。   备忘录对象是一个用来存储另一个对象内部状态的快照的对象。备忘录模式的用意是在不破坏封装的条件下,将一个对象的状态捕捉住,并外部化,存储起来,从而可以在将来合适的时候把这个对象还原到存储起来的状态。备忘录模式常常与命令模式和迭代子模式一起使用。   常见的系统往往不止存储一个状态,而是需要存储多个状态。这些状态常常是一个对象历史发展的不同阶段的快照,存储这些快照的备忘录对象叫做此对象的历史;某一个快照所处的位置叫做检查点。 1.角色 1.备忘录角色 备忘录角色有如下责任:   (1)将发起人(Originator)对象的内战状态存储起来。备忘录可以根据发起人对象的判断来决定存储多少发起人(Originator)对象的内部状态。   (2)备忘录可以保护其内容不被发起人(Originator)对象之外的任何对象所读取。   备忘录有两个等效的接口:   ●   窄接口: 负责人(Caretaker)对象(和其他除发起人对象之外的任何对象)看到的是备忘录的窄接口(narrow interface),这个窄接口只允许它把备忘录对象传给其他的对象。   ●   宽接口: 与负责人对象看到的窄接口相反的是,发起人对象可以看到一个宽接口(wide interface),这个宽接口允许它读取所有的数据

行为型模式(十) 备忘录模式(Memento)

一世执手 提交于 2019-11-27 12:12:55
动机(Motivate) 在软件构建过程中,某些对象的状态在转换的过程中,可能由于某种需要,要求程序能够回溯到对象之前处于某个点时的状态。如果使用一些公有接口来让其他对象得到对象的状态,便会暴露对象的细节实现。   如何实现对象状态的良好保存与恢复,但同时又不会因此而破坏对象本身的封装性? 意图(Intent) 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态(如果没有这个关键点,其实深拷贝就可以解决问题)。这样以后就可以将该对象恢复到原先保存的状态。 ——《设计模式》GoF 结构图(Structure) 模式的组成 可以看出,在备忘录模式的结构图有以下角色: (1)、发起人角色(Originator): 记录当前时刻的内部状态,负责创建和恢复备忘录数据。负责创建一个备忘录Memento,用以记录当前时刻自身的内部状态,并可使用备忘录恢复内部状态。Originator【发起人】可以根据需要决定Memento【备忘录】存储自己的哪些内部状态。 (2)、备忘录角色(Memento): 负责存储发起人对象的内部状态,在进行恢复时提供给发起人需要的状态,并可以防止Originator以外的其他对象访问备忘录。备忘录有两个接口:Caretaker【管理角色】只能看到备忘录的窄接口,他只能将备忘录传递给其他对象。Originator【发起人】却可看到备忘录的宽接口