在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象回复到原先保存的状态。 玩游戏时,角色有体力值,攻击力,防御力。保存这些状态并恢复。 记录听歌时的状态(歌曲名称,百分比,播放模式)。感兴趣的同学实现后可以发我一起参考下。定义
使用场景
结构图
描述
完整示例
角色类
Class PHA.YX.Design.Memento.GameRole Extends %RegisteredObject { Property vitality As %Integer [ Private ]; Method vitalityGet() As %Integer [ ServerOnly = 1 ] { Quit i%vitality } Method vitalitySet(Arg As %Integer) As %Status [ ServerOnly = 1 ] { s i%vitality = Arg Quit $$$OK } Property attact As %Integer [ Private ]; Method attactGet() As %Integer [ ServerOnly = 1 ] { Quit i%attact } Method attactSet(Arg As %Integer) As %Status [ ServerOnly = 1 ] { s i%attact = Arg Quit $$$OK } Property defense As %Integer [ Private ]; Method defenseGet() As %Integer [ ServerOnly = 1 ] { Quit i%defense } Method defenseSet(Arg As %Integer) As %Status [ ServerOnly = 1 ] { s i%defense = Arg Quit $$$OK } Method StateDisplay() { w "当前角色状态:",! w "体力:" _ ..vitalityGet(),! w "攻击力:" _ ..attactGet(),! w "防御力:" _ ..defenseGet(),! w "",! } Method GetInitState() { s ..vitality = 100 s ..attact = 100 s ..defense = 100 } Method Fight() { s ..vitality = 0 s ..attact = 0 s ..defense = 0 } Method SaveState() As RoleStateMemento { q ##class(RoleStateMemento).%New(..vitality, ..attact, ..defense) } Method RecoveryState(memento As RoleStateMemento) { s ..vitality = memento.vitalityGet() s ..attact = memento.attactGet() s ..defense = memento.defenseGet() } }
储存类
Class PHA.YX.Design.Memento.RoleStateMemento Extends %RegisteredObject { Property vitality As %Integer [ Private ]; Method vitalityGet() As %Integer [ ServerOnly = 1 ] { Quit i%vitality } Method vitalitySet(Arg As %Integer) As %Status [ ServerOnly = 1 ] { s i%vitality = Arg Quit $$$OK } Property attact As %Integer [ Private ]; Method attactGet() As %Integer [ ServerOnly = 1 ] { Quit i%attact } Method attactSet(Arg As %Integer) As %Status [ ServerOnly = 1 ] { s i%attact = Arg Quit $$$OK } Property defense As %Integer [ Private ]; Method defenseGet() As %Integer [ ServerOnly = 1 ] { Quit i%defense } Method defenseSet(Arg As %Integer) As %Status [ ServerOnly = 1 ] { s i%defense = Arg Quit $$$OK } Method %OnNew(vitality, attact, defense) As %Status [ Private, ServerOnly = 1 ] { s ..vitality = vitality s ..attact = attact s ..defense = defense Quit $$$OK } }
管理类
Class PHA.YX.Design.Memento.RoleStateCaretaker Extends %RegisteredObject { Property memento As RoleStateMemento [ Private ]; Method mementoGet() As RoleStateMemento [ ServerOnly = 1 ] { Quit i%memento } Method mementoSet(Arg As RoleStateMemento) As %Status [ ServerOnly = 1 ] { s i%memento = Arg Quit $$$OK } }
调用
/// d ##class(PHA.YX.Design.Program).Memento() ClassMethod Memento() { /*进入游戏*/ #dim yx as PHA.YX.Design.Memento.GameRole s yx = ##class(PHA.YX.Design.Memento.GameRole).%New() d yx.GetInitState() d yx.StateDisplay() /*保存进度*/ #dim state as PHA.YX.Design.Memento.RoleStateCaretaker s state = ##class(PHA.YX.Design.Memento.RoleStateCaretaker).%New() d state.mementoSet(yx.SaveState()) /*大战BOSS,损耗严重*/ d yx.Fight() d yx.StateDisplay() /*恢复之前状态*/ d yx.RecoveryState(state.mementoGet()) d yx.StateDisplay() }
DHC-APP>d ##class(PHA.YX.Design.Program).Memento() 当前角色状态: 体力:100 攻击力:100 防御力:100 当前角色状态: 体力:0 攻击力:0 防御力:0 当前角色状态: 体力:100 攻击力:100 防御力:100
思考
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算