有没有更好的方法来定制库而不是继承?

时间:2009-11-25 14:04:36

标签: oop inheritance

很可能是OO概念问题/情况:

我有一个库,我在我的程序中使用了源文件。我已经意识到我需要根据我的需要定制库,比如我需要修改C类中单个函数F的行为,同时保留原始库的源代码,以便能够在需要时无痛地升级它。 p>

我意识到我可以创建自己继承自C的C1类,将它放在我的源代码树中,然后编写函数F,看看它是否适合,替换所有出现的

myObj = new C();

myObj = new C1();

贯穿我的代码。

这样做的“正确”方法是什么?我怀疑我描述的继承方法有问题,因为其内部的库仍然会使用C :: F而不是我的C1 :: F,如果我仍然可以引用C :: F而不是一些奇怪的话会更酷我的代码中的C1 :: F。

对于那些关心的人 - 语言是PHP5,我有点像OOP新手:)

1 个答案:

答案 0 :(得分:1)

我认为子类化几乎是向外部库添加功能的最佳方式。

替代方法是decorator pattern,你必须包装C类的每个方法。 (装饰模式有时间和地点,但我认为不是这样)

你说:

  

因为其内部的库仍然使用C :: F而不是我的C1 :: F

不一定是真的。如果您将C1类的实例传递给库函数,那么对该对象的方法F的任何调用仍将通过您的C1::F方法。当C类通过调用$this->F()访问自己的方法时也会发生同样的情况 - 因为它仍然是C1对象。此属性称为polymorphism

当库的代码本身实例化类C新对象时,这不适用。