铁匠

做人要低调
随笔 - 134, 评论 - 255 , 引用 - 184

导航

公告

文章分类

存档

随笔分类

相册

BLOG

网站

论坛

回调与多态

项目里面自从实现了把对象直接绑定到GRID上后,OOP一下子成了解决任何问题的良方:当系统启动的时候,把所有在软件运行过程中要用的数据全部以对象的形式持久化到内存里,显示界面的时候,调用这些对象来显示,打印报表的时候也是调用它们,一下子就解决了转存一次数据库后,引起的精度误差,实现了真正的表里如一。但是OOP有时候也会碰到麻烦的事情:比如说有两个对象要进行一些比较,但是现在的GRID上只支持一行绑定一个对象,于是我们又进行了进一步的封装比如说叫:TDoubleObject,里面封装着两个对象及公布了一个两个的比较结果的属性。通过RTTI也是一样可以把它绑定到GRID里去。因为对象类型的多样性,如果是要把比较结果的那个属性用多态来实现,那这个工作量简直像天文数字,而且有时候,还要在运行过程动态地改变比较计算的算法,这时候多态一下子就不能胜任了。

于是我又抓住了回调这根救命草:TCalcEvent = funtcion(A, B: TObject): Double of object,在运行过程中,可以通过动态地赋这个计算的回调函数,很轻松地解决了这样的问题。回调就像是红警里面的多功能步兵战车一样:装入工程师变成维修车,装入大兵成了装甲车,装入……不过这样做一下子就破坏了封装,对象自己内部不知道自己的属性是怎么算出来的,完全依靠外界的这个计算函数。应该说没有一个方案是完美的吧。

发表于 2005年9月14日 22:13

评论

# re: 回调与多态

这个问题好玩!!
delphi我不会,但是个人认为用事件回调不愧为一个相当巧妙的方法!!(赞啊!)
还是有元数据的语言好,rtti简便易行,这点原生delphi就比不上虚拟机语言了
2005-10-7 13:13 | NickLedson

# re: 回调与多态

但是这样做就有点c风格里面的传入函数指针的味道了,就像你自己说的破坏了封装.
不知设计模式里面有没有这样的解决方案了.

你能把代码结构说得更清晰一些吗?我想仔细思考一下这个问题
2005-10-7 13:29 | NickLedson

# re: 回调与多态

你好,没有你的油箱,只好这样联系你,马上要报名了,我想报西工大计算机网络,可是不知道选哪个导师,我想选王福豹教授,但是听说他经常不在学校,这样会影响学习吗,你了解他吗?给点意见,谢谢了,我的油箱:ermen@126.com谢谢
2005-10-10 12:13 | 左刚

# re: 回调与多态

我不是计算机系的,同时也已经毕业多时了,学校里的老师我大部分都不认识,所以不能帮上忙,很报歉!
2005-10-11 19:10 | 铁匠

# re: 回调与多态

我还没学过! 有点难度 拉!
2005-12-18 11:18 | 11

Post Comment

主题  
姓名  
主页
校验码  
内容   
京ICP备 05050892号