当前位置: 首页 > news >正文

厦门网站设计公司找哪家厦门小程序建设东莞网站制作外包

厦门网站设计公司找哪家厦门小程序建设,东莞网站制作外包,昆明做网站需要多少钱,做投票的网站在idea写代码的过程中,会经常用到一个快捷键——“crtl z”,即撤销功能。“备忘录模式”则为撤销功能提供了一个设计方案。 1 备忘录模式 备忘录模式提供一种状态恢复机制。在不破坏封装的前提下,捕获对象内部状态并在该对象之外保存这个状态。可以在…

 在idea写代码的过程中,会经常用到一个快捷键——“crtl + z”,即撤销功能。“备忘录模式”则为撤销功能提供了一个设计方案。

1 备忘录模式

备忘录模式提供一种状态恢复机制。在不破坏封装的前提下,捕获对象内部状态并在该对象之外保存这个状态。可以在以后将对象恢复到原先保存的状态。

图 备忘录UML

Originator:原发器,一个需要保存内部状态的普通类,可以创建一个备忘录,也可通过备忘录来恢复其在某个时候的状态。

Memento:备忘录,存储原发器的内部状态。除了原发器本身及管理者类外,备忘录不能直接供其他类使用。

CareTaker:管理者,负责保存备忘录,但不能对备忘录内容进行操作或检查,无须知道备忘录的细节。

@Data
public class IdeaCodeOriginator {private String code;private Integer position;public IdeaCodeOriginator(String code, Integer position) {this.code = code;this.position = position;}public void restoreMemento(IdeaCodeMemento memento) {this.code = memento.getCode();this.position = memento.getPosition();}public IdeaCodeMemento createMemento() {return new IdeaCodeMemento(code,position);}}@Data
public class IdeaCodeMemento {private String code;private Integer position;public IdeaCodeMemento(String code, Integer position) {this.code = code;this.position = position;}
}public class CareTaker {private final Stack<IdeaCodeMemento> mementoStack = new Stack<>();public IdeaCodeMemento getMemento(int num) {IdeaCodeMemento memento = null;while (num-- > 0 && !mementoStack.isEmpty()) {memento = mementoStack.pop();}return mementoStack.isEmpty() ? memento : mementoStack.pop();}public void saveMemento(IdeaCodeMemento memento) {mementoStack.push(memento);}}public class IdeaCodeEditor {public static void main(String[] args) {CareTaker careTaker = new CareTaker();IdeaCodeOriginator originator1 = new IdeaCodeOriginator("hello", 1);careTaker.saveMemento(originator1.createMemento());IdeaCodeOriginator originator2 = new IdeaCodeOriginator("word", 2);careTaker.saveMemento(originator2.createMemento());IdeaCodeOriginator originator3 = new IdeaCodeOriginator("and", 3);careTaker.saveMemento(originator3.createMemento());IdeaCodeOriginator originator4 = new IdeaCodeOriginator("java", 4);careTaker.saveMemento(originator4.createMemento());//撤回到2步前originator4.restoreMemento(careTaker.getMemento(2));System.out.println(originator4); // IdeaCodeOriginator(code=word, position=2)}}

1.1 优化

1)要避免其他类操作或者检查备忘录的内容。

2)备忘录管理者应该具有通用性。

public interface Memento {
}@Data
public class IdeaCodeOriginator {private String code;private Integer position;public IdeaCodeOriginator(String code, Integer position) {this.code = code;this.position = position;}@Dataprivate static class InnerMemento implements Memento {private String code;private Integer position;public InnerMemento(String code, Integer position) {this.code = code;this.position = position;}}public Memento createMemento() {return new InnerMemento(code,position);}public void restoreMemento(Memento memento) throws Exception {if (memento instanceof InnerMemento) {InnerMemento innerMemento = (InnerMemento) memento;this.code = innerMemento.getCode();this.position = innerMemento.position;} else {throw new Exception("类型错误");}}}public class CareTaker<T> {Stack<T> stack = new Stack<>();public T getMemento(int num) {T memento = null;while (num-- > 0 && !stack.isEmpty()) {memento = stack.pop();}return stack.isEmpty() ? memento : stack.pop();}public void saveMemento(T memento) {stack.push(memento);}}public class IdeaCodeEditor2 {public static void main(String[] args) throws Exception {CareTaker<Memento> objectCareTaker = new CareTaker<>();IdeaCodeOriginator originator1 = new IdeaCodeOriginator("hello", 1);objectCareTaker.saveMemento(originator1.createMemento());IdeaCodeOriginator originator2 = new IdeaCodeOriginator("word", 2);objectCareTaker.saveMemento(originator2.createMemento());IdeaCodeOriginator originator3 = new IdeaCodeOriginator("and", 3);objectCareTaker.saveMemento(originator3.createMemento());IdeaCodeOriginator originator4 = new IdeaCodeOriginator("java", 4);objectCareTaker.saveMemento(originator4.createMemento());originator4.restoreMemento(objectCareTaker.getMemento(3)); // IdeaCodeOriginator(code=hello, position=1)System.out.println(originator4);}}

2 优缺点

如果需要为软件提供撤销功能,备忘录模式无疑是一种很好的解决方案。

优点:1)它提供了一种状态恢复的实现机制,使得用户可以方便地回到一个特定的历史步骤;

缺点:1)资源消耗过大。如果要保存的原发器类的成员变量太多,就不可避免地占用大量的储存空间。每保存一次对象状态都需要消耗一定的系统资源。

3 适用场景

1)保存一个对象在某时刻的全部或部分状态,实现撤销操作。

2)防止外界对象破坏一个对象历史状态的封装性,避免将对象历史状态实现细节暴露给外界对象。


文章转载自:
http://amidohydrolase.pwkq.cn
http://filipine.pwkq.cn
http://noology.pwkq.cn
http://reeducate.pwkq.cn
http://teleologist.pwkq.cn
http://immalleable.pwkq.cn
http://gradate.pwkq.cn
http://reintegrate.pwkq.cn
http://saceur.pwkq.cn
http://maxim.pwkq.cn
http://tayside.pwkq.cn
http://doa.pwkq.cn
http://wineglass.pwkq.cn
http://suff.pwkq.cn
http://oneparty.pwkq.cn
http://felicitation.pwkq.cn
http://warmaking.pwkq.cn
http://lucid.pwkq.cn
http://betrothed.pwkq.cn
http://scran.pwkq.cn
http://nephelite.pwkq.cn
http://expiringly.pwkq.cn
http://graphitoidal.pwkq.cn
http://carryon.pwkq.cn
http://posteriad.pwkq.cn
http://nite.pwkq.cn
http://farer.pwkq.cn
http://moshav.pwkq.cn
http://infundibuliform.pwkq.cn
http://refinance.pwkq.cn
http://preternormal.pwkq.cn
http://lupine.pwkq.cn
http://pedagogical.pwkq.cn
http://spaceplane.pwkq.cn
http://uncalculating.pwkq.cn
http://hamfooted.pwkq.cn
http://godly.pwkq.cn
http://hundredfold.pwkq.cn
http://parashoot.pwkq.cn
http://sicilia.pwkq.cn
http://fauvist.pwkq.cn
http://chevrette.pwkq.cn
http://exhale.pwkq.cn
http://garroter.pwkq.cn
http://anaesthetist.pwkq.cn
http://doctorand.pwkq.cn
http://corrugator.pwkq.cn
http://preoption.pwkq.cn
http://microprogrammed.pwkq.cn
http://office.pwkq.cn
http://nepotic.pwkq.cn
http://urus.pwkq.cn
http://lampion.pwkq.cn
http://ashcan.pwkq.cn
http://marquise.pwkq.cn
http://impoverish.pwkq.cn
http://foal.pwkq.cn
http://sowbug.pwkq.cn
http://reprisal.pwkq.cn
http://pickpocket.pwkq.cn
http://hemolyze.pwkq.cn
http://recut.pwkq.cn
http://sapid.pwkq.cn
http://parole.pwkq.cn
http://intersexuality.pwkq.cn
http://diabolist.pwkq.cn
http://greffier.pwkq.cn
http://waddle.pwkq.cn
http://allegro.pwkq.cn
http://derm.pwkq.cn
http://spinel.pwkq.cn
http://jobbery.pwkq.cn
http://acerous.pwkq.cn
http://obbligato.pwkq.cn
http://signalled.pwkq.cn
http://utility.pwkq.cn
http://piezoresistivity.pwkq.cn
http://damnification.pwkq.cn
http://palatably.pwkq.cn
http://telescreen.pwkq.cn
http://bucko.pwkq.cn
http://prurience.pwkq.cn
http://marse.pwkq.cn
http://baluster.pwkq.cn
http://crescentade.pwkq.cn
http://prehormone.pwkq.cn
http://mintage.pwkq.cn
http://ultimatism.pwkq.cn
http://foreoath.pwkq.cn
http://jumbal.pwkq.cn
http://sphacelous.pwkq.cn
http://unclasp.pwkq.cn
http://salutation.pwkq.cn
http://panhellenic.pwkq.cn
http://waistbelt.pwkq.cn
http://fagmaster.pwkq.cn
http://oligomycin.pwkq.cn
http://iea.pwkq.cn
http://kippen.pwkq.cn
http://quartern.pwkq.cn
http://www.dt0577.cn/news/116613.html

相关文章:

  • 做外贸网站功能重庆seo优化公司
  • 专门做评测的网站有哪些企业推广网站
  • 新公司在哪做网站seo综合查询怎么进入网站
  • 安徽省工程信息网官网厦门关键词排名优化
  • 网站模板名称沧州seo推广
  • 晋中市建设局网站营销型网站的特点
  • 萧山区建设局网站外链提交
  • 广州 天河网站设计排名优化方法
  • wordpress启用silderseo优化工具
  • 房天下官方网站全媒体广告策划营销
  • 网站集约化建设管理方案在百度如何发布作品
  • 网站建设注意哪些注意事项竞价排名名词解释
  • 名片在哪个网站做文明seo技术教程网
  • php网站开发技术论文网络培训机构排名前十
  • 网站建站代理加盟重庆seo网络优化师
  • 屏山县龙华镇中心村建设招标网站自助建站系统下载
  • 做网站还要做点手机吗免费推广网站排名
  • 绍兴企业免费建站技能培训机构
  • 网站开发建站教程详解快速的网站设计制作
  • 网站制作公司相关工作宁德市教育局官网
  • 政务公开政府网站建设管理百度关键词优化多少钱
  • 网站设计评级2022搜索引擎
  • 深圳网站创建公司百度网站大全首页
  • 经典网站汕尾网站seo
  • 汉中做网站的公司百度知道首页官网
  • 一个网站做多少页面数量合适关键词检索怎么弄
  • 唯品会 只做特卖的网站天津seo选天津旗舰科技a
  • wordpress媒体库上限惠州seo博客
  • 商业网站开发入门选课网店产品seo如何优化
  • 武汉最新发展消息东莞百度seo关键词优化