UI设计师-UI设计模式与组件库-设计模式_备忘录模式:捕获对象的内部状态.docx

UI设计师-UI设计模式与组件库-设计模式_备忘录模式:捕获对象的内部状态.docx

  1. 1、本文档共41页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

PAGE1

PAGE1

设计模式–备忘录模式:捕获对象的内部状态

1备忘录模式的概念

备忘录模式(MementoPattern)是一种行为设计模式,它允许在不违反封装原则的情况下捕获和恢复对象的内部状态。这种模式特别适用于需要保存和恢复对象状态的场景,比如撤销和重做功能,或者当对象需要在特定时刻恢复到之前的某个状态时。

1.1原理

在备忘录模式中,对象的内部状态被封装在称为“备忘录”的对象中。原发器(Originator)负责创建备忘录并保存其内部状态,而不暴露这些状态的细节。备忘录对象通常包含一个时间戳,以记录状态被捕获的时刻。备忘录模式还包括一个管理者(Caretaker),它负责存储备忘录对象并提供恢复操作,但不访问备忘录的内部状态。这样,原发器的内部状态就只能通过自身的方法进行访问和修改,保证了封装性。

1.2类图

以下是备忘录模式的基本类图:

classDiagram

classOriginator{

+voidsetState(Stringstate)

+StringgetState()

+MementocreateMemento()

+voidrestoreMemento(Mementomemento)

+state:String

}

classMemento{

+voidsetState(Stringstate)

+StringgetState()

}

classCaretaker{

+voidaddMemento(Mementomemento)

+MementogetMemento(intindex)

}

Originator1--*Memento:has

Caretaker1--*Memento:has

Originator--Memento:createMemento()

Originator--Memento:restoreMemento()

Caretaker--Memento:addMemento()

Caretaker--Memento:getMemento()

2备忘录模式的应用场景

备忘录模式适用于以下几种情况:-当需要能够撤销一个或多个操作,或者在系统中实现重做功能时。-当需要保存对象在特定时刻的状态,以便在需要时能够恢复。-当对象的内部状态需要被封装,不能让外部对象直接访问和修改时。

2.1示例代码

2.1.1Originator类

classOriginator{

privateStringstate;

publicOriginator(Stringstate){

this.state=state;

}

publicMementocreateMemento(){

returnnewMemento(state);

}

publicvoidrestoreMemento(Mementomemento){

this.state=memento.getState();

}

publicvoidsetState(Stringstate){

this.state=state;

}

publicStringgetState(){

returnstate;

}

}

2.1.2Memento类

classMemento{

privatefinalStringstate;

publicMemento(Stringstate){

this.state=state;

}

publicStringgetState(){

returnstate;

}

}

2.1.3Caretaker类

importjava.util.ArrayList;

importjava.util.List;

classCaretaker{

privateListMementomementos=newArrayList();

publicvoidaddMemento(Mementomemento){

mementos.add(memento);

}

publicMementogetMemento(intindex){

returnmeme

您可能关注的文档

文档评论(0)

kkzhujl + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档