Go-ForIt 记事:eXtreme DragonSlayers 专题报告,第 9 部分: 避开继承的高“税收”
2009-11-06 00:00:00 来源:WEB开发网核心提示: 面对这种不让自己随便使用继承的要求,在考虑了一段时间之后,Go-ForIt 记事:eXtreme DragonSlayers 专题报告,第 9 部分: 避开继承的高“税收”(3),他们最终放弃了竭尽全力反对这种要求的计划,小组中的持继承优先观点的一派最终同意协助寻找一种更好的、可维护的解决方案,
面对这种不让自己随便使用继承的要求,在考虑了一段时间之后,他们最终放弃了竭尽全力反对这种要求的计划,小组中的持继承优先观点的一派最终同意协助寻找一种更好的、可维护的解决方案。我们这个小组提出了一种变通方案,即历史悠久的传统 ― “推卸责任”。
推卸责任
“委托”(Delegation)是一种设计模式,它解决了在为涉及到多个以基础类为中心的角色(这些角色不互斥)的情况建模时不得不创建每个子类组合的扩散这个问题。它不是为所有的可能角色组合创建子类,而是为每个单独的角色创建一个类。这些类将基础类行为的责任委托给基础类的一个实例。
下面的统一建模语言(UML)类图说明了在 Go-ForIt 中是如何使用委托的:
图 2. 如何在 Go-ForIt 中使用委托
在实现委托时, Customer 和 PersonalAssistant 对象将具有对底层 User 对象的引用,然后可以将涉及到公共 User 数据的调用和任务委托给该 User 对象。
使用委托的原因
委托的一个优点是它需要较少的类来表示各种类型的用户,使我们避开了在试图使用继承时看到的子类组合扩散。
另一个优点是当用户从一种类型转换为另一种类型时不必删除公共用户信息。例如,如果一个用户从作为 PA 切换为兼任 PA 和“顾客”,那么我们将只需创建 Customer 类的一个新的实例并将其与现有的 User 实例关联在一起。这比删除所有关于 User 的信息并重新创建更直观。
- ››Godaddy域名解析使用DNSPOD方法
- ››GOV.CN域名解析修改
- ››Google搜索引擎的奥秘
- ››Google测试搜索结果页面右侧内容更丰富的信息栏
- ››Google Dart精粹:应用构建,快照和隔离体
- ››google的代码审查
- ››google analytics清晰追踪爬虫的爬行信息
- ››Google+中文用户在两千万Google+大军中是少数派
- ››Google AdWords最昂贵点击成本的20种关键词分类
- ››Google运作经理Bryan Power给出的GOOGLE求职意见
- ››Google用户体验的十大设计原则
- ››Google Analytics(分析)能为网站带来什么
更多精彩
赞助商链接