3

我正在阅读 Fowler 的“重构”,第 1 章。

在第 51 页上,您会看到一部附有价格等级的电影。第一种方法是:使用继承创建多个电影,每个电影都使用其独特的 getCharge 方法来计算价格。在第 38 页,这种方法被放弃了,因为它太静态了——改变电影的分类太难了。但是,在第 51 页上再次使用了继承,这一次是为了价格。添加了三个价格子类:ChildrensPrice、NewReleasesPrice 和 RegularPrice。在这种设计中,通过更改价格对象来更改电影的分类更容易。但是在这里添加新的价格类别涉及添加一个新的类。

拥有一个基于接口或带有名称字段的抽象类的价格类不是更容易吗,所以名称可以是“ChildrensPrice”,您可以定义您想要的任何其他价格类别,而无需编写新类?

这是一个带有名称的重构模式,例如:“将硬编码的类更改为更动态的表示”?

这种方法的优缺点是什么?

4

1 回答 1

1

使用价格类别标签的方法更加“动态”,即使在运行时,您也可以轻松添加新的价格类别。另一方面,每个价格类别有一个类的“静态”方法让您可以在常用类型系统中表达更多约束。

例如,如果有一个仅适用于儿童价格的界面,则可以使用静态方法在代码中表达约束。使用动态方法,编译器无法区分两个价格类别。(在类型系统中表达尽可能多的约束通常是一个好主意。)

关于一般情况,我能说的就这些了。哪种方法更好最终取决于特定要求。

于 2013-03-02T11:02:01.673 回答