oop - Coldfusion组件可以共享方法而不是同一个父类(super class)的后代吗

标签 oop coldfusion multiple-inheritance coldfusion-9 cfc

我们已经使用了一段时间的面向对象冷融合的本土版本,我刚刚开始尝试使用 cfc 以及它“应该”如何完成......

如果我理解正确的话,cfinterface 定义了函数的签名,任何实现该接口(interface)的类都必须有自己的函数来执行接口(interface)中定义的操作。

我试图做相反的事情——接口(interface)不仅定义了函数的签名,还定义了函数的逻辑,任何实现该接口(interface)的东西都可以使用它的函数,而不必自己定义它。除了创建子类​​之外还存在吗?

例如,假设您有所有属于 Animal 类的 A、B、C、D 类

  • A&B会走路
  • A&C会说话
  • B&D可以 sleep
  • 假设无论类在做什么,walk、talk 和 sleep 的逻辑(如果对象可以这样做)都是相同的
  • 理想情况下,如果 A 和 B 都实现了 walk 接口(interface),那么它们可以在每个类中不定义单独的 walk 方法的情况下进行 walk。

  • 或者从这个 java multiple inheritance question 中借用一个更好的例子
  • 飞马是马和鸟的混合体,因为它像马一样奔跑
    但像鸟一样飞翔

  • 那可能吗? (我认为这是多重继承?)

    最佳答案

    简而言之:不,一个接口(interface)只定义了一个契约,它没有(也不能)定义功能)。 CFML 也没有多重继承的概念。

    您将不得不使用单一继承和具体实现来实现您所需要的。我不会费心评估您的实现共享要求来确定适当的类层次结构可能是什么,以最大限度地减少代码重复。我相信您可以自己做到这一点(无论如何,这并不是您问题的一部分)。

    您可以尝试的一种策略是将 mixins 用于您的常用方法。将常用方法存储在不同的库中,然后根据需要将它们注入(inject)到您的对象中。所以基本上 Mixins.cfc 会实现 walk() , talk() , sleep() , 你会有一个 AFactory.cfc , BFactory.cfc , CFactory.cfc .当向工厂询问新的 A , BC , 工厂方法在返回实例之前注入(inject) mixin 方法。显然这是一个相当繁琐的过程,您可能希望使用某种 IoC 容器来管理所有这些。

    您可能会提出一个更好的问题,向我们展示更多真实世界的示例......我怀疑如果您发现自己需要按照示例建议的方式进行操作,您的域设计可能会有所改进。实际设计要求很少通过使用动物的示例来展示。

    关于oop - Coldfusion组件可以共享方法而不是同一个父类(super class)的后代吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25558026/

    相关文章:

    c++ - ARM交叉编译,多重继承段错误

    java - 要使用 REST API 需要实现什么设计模式?

    java - 使用JAVA对象和输入数据进行赋值

    variables - Coldfusion - 如何转义变量内部的变量?

    coldfusion - 如何在 ColdFusion 中返回部分字符串

    c++ - 多重继承

    c++ - 使用 C++ 和 Openframeworks 创建对象的多个实例

    java - 我如何从两个不同的抽象类中实现特定的方法?

    coldfusion - 为什么 ColdFusion 隐式 setter 最终会进行网络调用?

    java - 实现阻塞接口(interface)