用户名: 密码: 验证码: QQ--程序群:31736530 动画群:38836599
闪无忧
 
首 页 业界新闻 业界杂谈 Flash教程 Flash源码 Flash图书 Flash酷站 Flex & AIR 供求信息
   本栏目通告:   有意向写收费精品教程的朋友,请联系本站合作
当前位置 :首页>flash教程>Flash as3.0教程>列表

AS3设计模式:备忘录模式(Memento Pattern)

[来源:蓝色理想 | 作者:flashlizi | 时间:2008-05-25 | 点击:  | 收藏本文  【 】]
原文出处:http://www.riaidea.com/article.asp?id=23

什么是备忘录(Memento)模式?

在不破坏封装性的前提下,保存一个对象当前的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到保存的状态。这就是Memento模式需要解决的问题。

Memento模式并没有一个非常准确的API,但是它大致涉及到3个角色:originator(发起者),memento(备忘录),caretaker(管理者)。originator可以是任何你要保存状态的对象,它必需定义设置和获取memento的方法,用来保存和恢复状态。memento跟originator是紧密相关的,因为它要保存originator的状态,就必须知道需要保存的状态的类型及数量。caretaker提供保存及恢复memento的方法。

Memento模式是如何实现的?

经常使用计算机的人恐怕对系统备份(Memento)不会陌生,当你的Windows系统运行正常时,对它进行备份,当系统运行有问题时,就可以调用备份快速的将系统恢复,这样就可以大量节省重新装系统的时间。下面我们来看看用Memento模式是如何实现这个过程的。

1、定义操作系统WindowsSystem类,即Memento模式中的originator:
复制内容到剪贴板
代码:
package com.riaidea.dp.memento{
    public class WindowsSystem{
        private var _state:String;
        public function WindowsSystem(){        
        }
        //创建备份,保存当前状态
        public function createMemento():Memento{
            return new Memento(this._state);
        }
        //从备份中恢复状态
        public function restoreMemento(memento:Memento):void{
            this._state=memento.getState();
        }
        //获取状态
        public function getState():String{
            return this._state;
        }
        //设置状态
        public function setState(state:String):void{
            this._state=state;
            trace("当前系统状态为:"+this._state);
        }
    }    
}
2、定义备份Memento类,即Memento模式中的memento:
复制内容到剪贴板
代码:
package com.riaidea.dp.memento{
    public class Memento{
        private var _state:String;
        //创建备份
        public function Memento(state:String){
            this._state=state;
        }
        //获得状态
        public function getState():String{
            return this._state;
        }
        //设置状态
        public function setState(state:String):void{
            this._state=state;
        }
    }    
}
3、定义用户(User)类,即Memento模式中的caretaker:
复制内容到剪贴板
代码:
package com.riaidea.dp.memento{
    public class User{
        private var memento:Memento;
        public function User(){            
        }
        //恢复系统
        public function retrieveMemento():Memento{
            return this.memento;
        }
        //保存系统
        public function saveMemento(memento:Memento):void{
            this.memento=memento;
        }
    }    
}
4、最后我们来看看测试类Test:
复制内容到剪贴板
代码:
package com.riaidea.dp.memento{
    import flash.display.Sprite;
    public class Test extends Sprite{
        public function Test(){
            var sys:WindowsSystem=new WindowsSystem();
            var user:User=new User();
            sys.setState("正常");
            user.saveMemento(sys.createMemento());
            sys.setState("异常");
            sys.restoreMemento(user.retrieveMemento());
            trace("当前系统状态为:"+sys.getState());
        }
    }    
}

输出结果为:
当前系统状态为:正常
当前系统状态为:异常
当前系统状态为:正常

总结:

此例非常简单,保存的状态是一个字符串属性_state。在实际应用中,我们保存的状态属性可能不止一个。另外,这里的User只保存最后一个memento,在有些情况下我们可能需要保存一系列memento,即保存多个备份,然后根据不同的情况选择不同的备份进行恢复。因此需要修改caretaker来进行调整。这个在游戏开发中可能会经常遇到。

memento.rar (5.61 KB)

文章如果有错误或者缺少文件,请发邮件提交给我们
上一篇:AS3画渐变圆角矩形
下一篇:AS3类包结构查看器分享
Tags:     AS3备忘录模式
>>> 最新评论:(共有 1 位网友发表了评论)      查看所有评论
  发表评论
用户名: 新注册) 密码: 匿名评论
评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
·本站发布内容均为客观表达作者观点,不代表闪无忧立场,请勿攻击和漫骂
·用户发表意见仅代表其个人意见,并且承担一切因发表内容引起的纠纷和责任
·本站管理人员有权在不通知用户的情况下删除不符合规定的评论信息或留做证据
·请客观的评价您所看到的资讯,提倡就事论事,杜绝漫骂和人身攻击等不文明行为
  教程分类
  基础操作   动画特效
  应用开发   组件学习
  As程序   动画教程
  Flash cs3   AS 3.0
  FCS/FMS教程   Loading教程
  Flash与Web   Flash教程连载
  相关文章
·flash【.swf?id=】很简单的获取
·AS3.0 单一职责原则设计模式
·as3打造一个非常酷的莲花曲线效
·AS3制作MP3波形图
·AS3的网页参数处理
·flash地图游戏说明如何结合AS3.0
·2/8/10/16/32进制AS3自带函数进
·as3实现点击图片取色
·flash as3+php上传源文件下载
·TransformManager (AS3) - Inter
  热门文章
·Flash进度条的制作详细讲解(组图)
·flash幻灯片网页效果
·Flex 3 AdvancedDataGrid的使用(第二
·全Flash动画网站实现的基础教学
·flash水影效果字
·Flash打造简单的飘雪动画视觉特效
·FLASH+XML相册(附源码)
·超酷flash光晕移动效果
·Flash旋转拖尾文字效果的制作教程
·Flash制作大雪纷飞效果动画
·flash春雷闪电效果
关于我们 - 免责声明 - 网站地图 - 商务服务 - 联系我们 - RSS地图
©CopyRight 2006-2008, 5UFlash.COM, Inc. All Rights Reserved
鲁ICP备06034971号