记忆点(Memento)

 

很多情况下在我们改变了很多东西的时候。却开始后悔了。也许这就是人类的软弱一面。不管怎么样人生是无法回到原点的。可是软体可以,因为一切运行的程序都是加载在内存中的。所以即使改变了,我们也是可以有办法回到原点的。我想你也许已经猜到我要说什么了吧?是的。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值改变的话,通过调用属性方法可以恢复.这样就满足了面向对象的原则.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值