WEB开发网
开发学院软件开发Java Go-ForIt 记事:eXtreme DragonSlayers 专题报告,... 阅读

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 中使用委托
Go-ForIt 记事:eXtreme DragonSlayers 专题报告,第 9 部分: 避开继承的高“税收”

在实现委托时, Customer 和 PersonalAssistant 对象将具有对底层 User 对象的引用,然后可以将涉及到公共 User 数据的调用和任务委托给该 User 对象。

使用委托的原因

委托的一个优点是它需要较少的类来表示各种类型的用户,使我们避开了在试图使用继承时看到的子类组合扩散。

另一个优点是当用户从一种类型转换为另一种类型时不必删除公共用户信息。例如,如果一个用户从作为 PA 切换为兼任 PA 和“顾客”,那么我们将只需创建 Customer 类的一个新的实例并将其与现有的 User 实例关联在一起。这比删除所有关于 User 的信息并重新创建更直观。

上一页  1 2 3 4  下一页

Tags:Go ForIt 记事

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接