您的位置:首页 > 其它

重构手法30:Replace Type Code with Class (以类取代类型码)

2010-08-05 15:31 375 查看
类之中有一个数值类型码,但它并不影响类的行为。以一个新的类替换该数值类型码。

动机:在以C为基础的编程语言中,类型码或枚举值很常见。如果带着一个有意义的符号名,类型码的可读性还不错。问题在于,符号名终究只是个别名,编译器看见的、进行类型检验的,还是背后那个数值。任何接受类型码作为参数的函数,所期望的实际上是一个数值,无法强制使用符号名。这会大大降低代码的可读性,从而成为bug之源。

如果把那样的数值换成一个类,编译器就可以对这个类进行类型检验。只要为这个类提供工厂函数,你就可以始终保证只有合法的实例才会被常见出来,而且他们都会被传递给正确的宿主对象。

但是,在使用Replace Type Code with Class (以类取代类型码)之前,你应该先考虑类型码的其他替换方式。只有当类型码是纯粹数据时(也就是类型码不会在switch语句中引起行为变化时),你才能以类来取代它。更重要的是:任何switch语句都应该运用Replace Conditional with Polymorphism (以多态取代条件表达式)去掉。为了进行那样的重构,你首先必须运用 Replace Type Code with Subclass (以子类取代类型码)或Replace Type Code with State/Strategy (以状态策略取代类型码),把类型码处理掉。

即使一个类型码不会因其数值的不同而引起行为上的差异,宿主类中的某些行为还是可能更适合放置于类型码类中,因此你还应该留意是否有必要使用Move Method(搬移函数)将一两个函数搬过去。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: