我为何需要使用空接口?
来源:互联网 发布:三公棋牌软件 编辑:程序博客网 时间:2024/05/29 07:03
显然,这种设计把持久功能放在PersistentObject 基接口中,并且要求想要拥有持久状态的对象继承PersistentObject。表面上,这是合理的:毕竟,这样使用继承是一种沿用已久的设计模式,那么,它可能有什么问题?我们发现,这种设计有这样一些问题:
• 上面的继承层次用来给 Thing1 和Thing2 增加行为。但在严格的OO 模型中,行为只能通过发送消息来调用。这引发了这样一个问题:PersistentObject 实际上该怎样着手完成它的工作;推测起来,它对Thing1 and Thing2 的实现(也就是,内部状态)有所了解,所以它可以把该状态写入数据库。但如果是这样, PersistentObject、Thing1,以及Thing2 就不能再在不同的地址空间中实现了,因为如果是那样, PersistentObject 就不再能知道Thing1 和Thing2 的状态。
换一种做法, Thing1 和Thing2 可以使用PersistentObject 提供的某种功能, 使它们的内部状态持久。但PersistentObject 没有任何操作,那么Thing1 和Thing2 实际上又该怎样去完成这件事情呢?再一次,唯一可行的做法是,在同一个地址空间中实现PersistentObject、Thing1,以及Thing2,并让它们在幕后共享实现状态,也就是说,它们不能在不同的地址空间中实现。
• 上面的继承层次把世界分成两半,一个含有持久对象,另一个含有非持久对象。这种做法有着深远的影响:
• 上面的继承层次用来给 Thing1 和Thing2 增加行为。但在严格的OO 模型中,行为只能通过发送消息来调用。这引发了这样一个问题:PersistentObject 实际上该怎样着手完成它的工作;推测起来,它对Thing1 and Thing2 的实现(也就是,内部状态)有所了解,所以它可以把该状态写入数据库。但如果是这样, PersistentObject、Thing1,以及Thing2 就不能再在不同的地址空间中实现了,因为如果是那样, PersistentObject 就不再能知道Thing1 和Thing2 的状态。
换一种做法, Thing1 和Thing2 可以使用PersistentObject 提供的某种功能, 使它们的内部状态持久。但PersistentObject 没有任何操作,那么Thing1 和Thing2 实际上又该怎样去完成这件事情呢?再一次,唯一可行的做法是,在同一个地址空间中实现PersistentObject、Thing1,以及Thing2,并让它们在幕后共享实现状态,也就是说,它们不能在不同的地址空间中实现。
• 上面的继承层次把世界分成两半,一个含有持久对象,另一个含有非持久对象。这种做法有着深远的影响:
阅读全文
0 0
- 我为何需要使用空接口?
- 我为何需要使用空接口?
- OSPF为何需要loopback接口
- 为何我的外部邮件地址需要使用 abc@xxx.local登录?
- Fragmnet为何一定需要空的构造方法
- mutex和cond为何需要配合使用
- 为何使用dynamic_cast转换类指针时,需要虚函数?
- pthreads 里mutex和cond为何需要配合使用
- 我们为什么要使用空接口
- 为何需要 SOA ?
- 为何需要重构
- 为何我们需要鼠标?
- 为何需要核函数
- 你为何需要iPhone6?
- 为何需要代码审查
- 为何需要字节对齐
- 为何需要静音检测
- 为何需要总结
- mysql 通过limit分页 oracle通过ruwnum来分页 语句如下
- Visual SLAM Introduction In Detail
- Castle 整合.NET Remoting
- 大端与小端存储模式详解
- 第三讲 配置文件解析
- 我为何需要使用空接口?
- Html.fromHtml利用Textview显示html文本
- marry
- 第四讲 属性名和字段名不一致的处理
- NHibernate 1.0 Released 版本发布了
- 自定义下拉刷新上拉加载的帮助接口ScrollableHelper
- 深度学习网络模型AlexNet
- [Python模块学习]用colorsys模块转换颜色模型,常见颜色模型简介(RGB/HSV/HSL/YIQ)
- 许久不见