1

我有一个模型系统:

abstract class R00_Model_iUnique { }
abstract class R00_Model_iFamilyUnique extends R00_Model_iUnique { } // for models with hierarchy
abstract class R00_Model_iTaggedUnique extends R00_Model_iUnique { } // for models with tags

// and, for example
class R00_Model_User extends R00_Model_iUnique { }
class R00_Model_Comment extends R00_Model_iFamilyUnique { }
class R00_Model_Post extends R00_Model_iTaggedUnique { }

将会有 R00_Model_iCommentableUnique 并且 R00_Model_Post 想要从它继承。但这是不可能的,它已经从 R00_Model_iTaggedUnique 继承了,我认为从 R00_Model_iCommentableUnique 继承 R00_Model_iTaggedUnique 并不聪明,反之亦然。我只想到了一个如何实现它的想法,但我有一些疑问。也许您可以告诉我一些聪明的方法或批评该方法?


我想使 R00_Model_i*Unique 不是类,而是接口,并创建辅助对象,例如 R00_Model_Helper_iUnique (也许它是一个常见的模式,并且有一个很酷的名字,我不认为 'Helper' 在那里会很酷? )。然后,在 R00_Model_iUnique 中,创建 __call(),它检查被调用对象的所有接口,并在帮助程序中查找被调用方法。

或者有太多的反射和其他邪恶的慢东西,不是吗?

4

1 回答 1

1

使用界面和助手(组合)是正确的方向。

这正是设计模式手册 (GoF) 的原则之一是“优先组合优于继承”的原因之一。

组合将为您提供在您需要的类中使用不同类的方法所需的灵活性。

于 2009-10-29T07:20:48.047 回答