动机:
某个函数在各个子类中的函数体都相同。
若干处于不同子类内的函数,而它们又可以通过某种形式的参数调整成为相同的函数。
子类的函数覆写了超类的函数,但却仍然做相同的工作。
被提升的函数可能会引用只出现于子类而不出现于超类的特性。如果被引用的是个函数,你可以将该函数也一同提升到超类,或者在超类中建立一个抽象函数。
如果两个函数相似但不相同,或许可以先借助form template method构造成相同的函数,然后提升它们。
做法:
检查待提升函数,确定它们是完全一致的。
=》如果这些函数看上去做了相同的事,单并不完全一致,可使用substitute algorithm让它们变得完全一致。
如果待提升函数的签名不同,将那些签名都修改为你想要在超类中使用的签名。
在超类中新建立一个函数,将某一个待提升函数的代码复制到其中,做适当调整,然后编译。
=》如果使用强类型语言,而待提升函数又调用了一个只出现于子类而未出现于超累的函数,可以在超类中为被调用函数声明一个抽象函数。
=》如果待提升函数使用了子类的一个字段,可以使用pull up field将该字段也提升到超类;也可以先使用self encapsulate field,然后在超类中把取值函数声明为抽象函数。
移除一个待提升的子类函数。
本文探讨了如何识别并统一不同子类中的重复函数,通过将这些函数提升至基类来减少代码冗余,提高代码复用性和维护性。

379

被折叠的 条评论
为什么被折叠?



