oop – Coldfusion组件可以共享方法,而不是同一超类的后代

我们已经使用了一个本土版本的面向对象的coldfusion一段时间了,我只是开始尝试使用cfc以及它应该如何完成……

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

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

例如,假设你有A,B,C,D类,它们都属于Animal类

> A& B可以走路
> A& C可以说话
> B& D可以睡觉
>假设步行,谈话和放大的逻辑睡眠(如果对象可以这样做)是相同的,无论班级做什么
>理想情况下,如果A& B都实现了行走界面,他们可以走路而无需在每个班级中定义单独的步行方法.

或者从这个java multiple inheritance question中借一个更好的例子

> Pegasus是马和鸟的混合体,因为它像马一样奔跑
但是像鸟一样苍蝇

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

最佳答案 简而言之:不,接口只定义合同,它不(也不能)定义功能. CFML也没有多重继承的概念.

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

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

一个更好的问题可能来自你向我们展示更多真实世界的例子……我怀疑如果你发现自己需要做你的例子建议你的域设计可能会有所改进.使用动物的例子很少暴露实际的设计要求.

点赞