.NET开发

本类阅读TOP10

·NHibernate快速指南(翻译)
·vs.net 2005中文版下载地址收藏
·【小技巧】一个判断session是否过期的小技巧
·VB/ASP 调用 SQL Server 的存储过程
·?dos下编译.net程序找不到csc.exe文件
·通过Web Services上传和下载文件
·学习笔记(补)《.NET框架程序设计(修订版)》--目录
·VB.NET实现DirectDraw9 (2) 动画
·VB.NET实现DirectDraw9 (1) 托管的DDraw
·建站框架规范书之——文件命名

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
记忆点(Memento)

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

 

很多情况下在我们改变了很多东西的时候。却开始后悔了。也许这就是人类的软弱一面。不管怎么样人生是无法回到原点的。可是软体可以,因为一切运行的程序都是加载在内存中的。所以即使改变了,我们也是可以有办法回到原点的。我想你也许已经猜到我要说什么了吧?是的。Memento 模式。一个很简单的模式。
//原对象
public class Originator {

  public int number;
  public object myObject = null;
         private Memento myMemobject;
  public Originator(){}
        
          public Memento MemObject{
             get{
                   return new Memento(this);
                  }
             set{
                    myMemobject=value;
                    this.number=myMemobject.Number;
                    this.myObject=myMemobject.O;
                  }
             }
  }

//记忆点
[Serializable]
private class Memento : ISerializable {

  private int Number;

  private Object O = null;

  public Memento( Originator o){

    number = o.number;
    O = o.myObject;

  }

}

//调用实例
public class Client
    {
        public static int Main(string[] args)
        {     
   Originator o = new Originator();
                                 Memento  m=o.MemObject;
                                                 //改变值
                                                 o.number=100;
                                                 o.myObject="object";
                                                 //还原
                                                o.MemObject=m;
                                                return 0;
        }
    }

Memento中保存了Originator中的number和object的值. 通过调用Originator中number和object值改变的话,通过调用属性方法可以恢复.这样就满足了面向对象的原则.




相关文章

相关软件