实现Undo/Redo以及格式刷的分析

在网上看了备忘录模式实现undoredo,实际上也没必要理解得很复杂,其实算是比较好做的东西。UndoRedo的核心就在于要保存对象的属性,以便还原,两个道理都是一样的。

 

实现此功能的必要技术(这里的必要只是说掌握了实现起来很容易):自定义特性,反射,数据结构中的栈(能用集合模拟也可以)。反射在.net中强大到我已经无语了,不懂的补下基础。

 

撤销删除实现步骤:

1.需要实现UndoRedo的实体类,这个自己写,什么都可以,复杂简单都可以,反正是通用的,当然你撤销/重复的必须是属性,当然方法也可以,这个比较麻烦就不介绍了,自己也是见过但是没用过。

 

2.写自定义特性类,不用复杂,能识别就可以了,比如只需要一个名字属性(写成构造函数即可,当然可以加很多别的),在支持Undo/Redo的属性上加上这个特性,自定义特性的构造函数名就用所加属性的名字即可,如下:

 

3.做一个类,存放操作对象的引用,所修改的值,修改前的值,修改的属性名。(怎么做?简单,写个监听属性改变的事件就可以了,不会的去看事件)

 

4.做到这里还差什么呢?基本上拿着这些都能实现了吧,不过咱们要的不是一步操作,当然还需要一个栈来存储,前面说了,模拟栈也可以,这个相当简单了,用泛型集合很容易实现,你问我放什么?当然是第三步存放属性类的对象了,当然最重要的是别忘了还要在弄一个集合来存放这个集合对象(一次改变多个对象的情况肯定是有的)

 

5.到这里真的什么都不差了,反射里PropertyInfo中的SetValue,GetValue方法一运用,OK了?随便你UndoRedo

 

补充一下格式刷的说明

既然上面都实现了嘛,格式刷就是小菜一碟了,存放属性的对象有了,存放这个对象的集合有了,那还缺啥,什么都不缺了,想办法取出来所需要的属性,刷就行了。(可能还有些具体工作,实现方法很多,看自己了)

举一个例:能够支持格式刷的当然是有同种属性的对象,只要在对象的类头上加上自定义属性,表明这个类支持什么样的属性,后面的工作就简单了。

 

难得写一篇博客,也就是提供一个思路,其实想清楚了实现很简单的,网上的代码很多人可能突然看不懂,看看我写的流水账也许有助于理解,明天还得上班,就先写到这里吧。欢迎大家批评指正,夜深了脑子不清楚,以后我会尽量补充完善

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值