某些方法不适用于最常用的构造函数

时间:2011-10-29 11:21:18

标签: architecture refactoring

我遇到了2000多行的课程。它有两个构造函数 - 一个简单的构造函数和一个复杂的构造函数。大多数方法都适用于两个构造函数,但是如果使用简单的构造函数实例化对象,有一些方法会失败或表现得很奇怪。

在这种情况下继承是可能的,但它有点奇怪。它不是一个不同的对象,它只是一个不同的构造函数。

在对需要复杂构造函数的方法的调用上抛出异常将是一个难看的补丁。

是否有解决此问题的标准重构或模式?

2 个答案:

答案 0 :(得分:3)

如果你的意图是方法的可用性取决于调用哪个构造函数,那么它们应该是不同的对象。

最好定义单独的类,或者修改构造函数以创建所有方法都有效的有效对象。

如果您认为它确实应该是一个类,那么可能对此有帮助的常见模式是“链式构造函数”,其中较简单的构造函数使用缺少参数的适当默认值调用更复杂的构造函数。

另一方面,如果你决定使用两个类,它可能是一个继承关系,更复杂的类扩展了更简单的一个,或者它可能明显是一个复合关系,其中更复杂的类包含一个字段,它是更简单的类的对象,并将一些功能委托给另一个。

更具体和明确的建议需要看到一些代码(但不是2000多行)展示问题。

答案 1 :(得分:2)

这不仅仅是一个不同的构造函数。您定义的方法在调用其中一个构造函数时无法正常工作。即,它们无效。这有点像定义一个Vehicle,它有Start Engine,Move the Aileron和Put Into Reverse的方法。一种适用于两者,一种适用于飞机,一种适用于汽车。在我看来,你需要继承。