不完美的库类
复用常被视为对象的终极目的。不过我们认为,复用的意义经常被高估——大多数对象只要够用就好。但是无可否认,许多编程技术都建立在程序库的基础上,没人敢说是不是我们都把排序算法忘得一干二净了。
库类构筑者没有未卜先知的能力,我们不能因此责怪他们。毕竟我们自己也几乎总是在系统快要构筑完成的时候才能弄淸楚它的设计,所以库作者的任务真地很艰巨。麻烦的是库往往构造得不够好,而且往往不可能让我们修改其中的类使它完成我们希望完成的工作。这是否意味那些经过实践检验的战术,如Move Method等,如今都派不上用场了?
幸好我们有两个专门应付这种情况的工具。如果你只想修改库类的一两个函数,可以运用Introduce Foreign Method;如果想要添加一大堆额外行为,就得运用Introduce Local Extension。