我们已经使用了一段时间的面向对象冷融合的本土版本,我刚刚开始尝试使用 cfc 以及它“应该”如何完成......
如果我理解正确的话,cfinterface 定义了函数的签名,任何实现该接口(interface)的类都必须有自己的函数来执行接口(interface)中定义的操作。
我试图做相反的事情——接口(interface)不仅定义了函数的签名,还定义了函数的逻辑,任何实现该接口(interface)的东西都可以使用它的函数,而不必自己定义它。除了创建子类之外还存在吗?
例如,假设您有所有属于 Animal 类的 A、B、C、D 类
或者从这个 java multiple inheritance question 中借用一个更好的例子
但像鸟一样飞翔
那可能吗? (我认为这是多重继承?)
最佳答案
简而言之:不,一个接口(interface)只定义了一个契约,它没有(也不能)定义功能)。 CFML 也没有多重继承的概念。
您将不得不使用单一继承和具体实现来实现您所需要的。我不会费心评估您的实现共享要求来确定适当的类层次结构可能是什么,以最大限度地减少代码重复。我相信您可以自己做到这一点(无论如何,这并不是您问题的一部分)。
您可以尝试的一种策略是将 mixins 用于您的常用方法。将常用方法存储在不同的库中,然后根据需要将它们注入(inject)到您的对象中。所以基本上 Mixins.cfc 会实现 walk()
, talk()
, sleep()
, 你会有一个 AFactory.cfc
, BFactory.cfc
, CFactory.cfc
.当向工厂询问新的 A
, B
或 C
, 工厂方法在返回实例之前注入(inject) mixin 方法。显然这是一个相当繁琐的过程,您可能希望使用某种 IoC 容器来管理所有这些。
您可能会提出一个更好的问题,向我们展示更多真实世界的示例......我怀疑如果您发现自己需要按照示例建议的方式进行操作,您的域设计可能会有所改进。实际设计要求很少通过使用动物的示例来展示。
关于oop - Coldfusion组件可以共享方法而不是同一个父类(super class)的后代吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25558026/