很可能是OO概念问题/情况:
我有一个库,我在我的程序中使用了源文件。我已经意识到我需要根据我的需要定制库,比如我需要修改C类中单个函数F的行为,同时保留原始库的源代码,以便能够在需要时无痛地升级它。 p>
我意识到我可以创建自己继承自C的C1类,将它放在我的源代码树中,然后编写函数F,看看它是否适合,替换所有出现的
myObj = new C();
与
myObj = new C1();
贯穿我的代码。
这样做的“正确”方法是什么?我怀疑我描述的继承方法有问题,因为其内部的库仍然会使用C :: F而不是我的C1 :: F,如果我仍然可以引用C :: F而不是一些奇怪的话会更酷我的代码中的C1 :: F。
对于那些关心的人 - 语言是PHP5,我有点像OOP新手:)
答案 0 :(得分:1)
我认为子类化几乎是向外部库添加功能的最佳方式。
替代方法是decorator pattern,你必须包装C
类的每个方法。 (装饰模式有时间和地点,但我认为不是这样)
你说:
因为其内部的库仍然使用C :: F而不是我的C1 :: F
不一定是真的。如果您将C1
类的实例传递给库函数,那么对该对象的方法F
的任何调用仍将通过您的C1::F
方法。当C
类通过调用$this->F()
访问自己的方法时也会发生同样的情况 - 因为它仍然是C1
对象。此属性称为polymorphism
当库的代码本身实例化类C
的新对象时,这不适用。