你在各个子类中拥有一些构造函数,它们的本体几乎完全一致。在超类中新建一个构造函数,并在子类构造函数中调用它。
动机:构造函数是很奇妙的东西。它们不是普通函数,使用它们比使用普通函数受到更多的限制。
如果你看见各个子类中的函数有共同的行为,第一个念头应该是将共同行为提炼到一个独立函数中,然后将这个函数提升到超类。对构造函数而言,它们彼此的共同行为往往就是“对象的构建”。这时候你需要在超类中提供一个构造函数,然后让子类都来调用它。很多时候,子类构造函数的唯一动作就是调用超类构造函数。这里不能运用 Pull Up Method (方法上移),因为你无法在子类中继承超类构造函数。
如果重构过程过于复杂,你可以考虑使用 Replace Constructor with Factory Method (以工厂函数取代构造函数)。