[10] Switch Statements(Switch 惊悚现身)

10 Switch Statements(Switch 惊悚现身)


面向对象程序的一个最明显特征就是:

少用switch(或case)语句.

从本质上说,switch语句的问题在于重复. 你会发现同样的switch语句散布于不同地点.如果要为它添加一个新的case子句,就必须找到所有并修改它们,面向对象的多态概念可为此带来优雅的解决方案.

大多数时候,一看到swith语句,你就应该考虑以多态来替换它. 问题是多态该出现在哪里?Switch语句常常根据类型码进行选择,你要的是

"与该类型码相关的函数或类"

所以应该使用Extract Method将switch语句提炼到一个独立函数中,再以Move Method 将它们搬移到需要多态性的那个类里. 此时你必须决定是否使用Replace Type Code with Subclasses(用子类取代类型码)或者Replace Type Code With State/Strategy(用state或Strategy替代类型码) . 一旦这样完成继承结构之后, 你就可以运用Replace wonditional with
Polymorphism(用多态取代条件表达式)

如果你只是在单一函数中有些选择事例, 且并不想改动它们,那么多态就有点杀鸡用牛刀了. 这种情况下Replace Parameter with Explicit Methods(以明确函数取代参数)是个不错的选择. 如果你的选择条件之一是null, 可以试试Introduce Null Object(引入Null对象).


tips

Replace Type Code with Subclasses(用子类取代类型码)

如果你面对的类型码不会影响宿主类的行为,
可以使用Replace Type Code with Class来处理它们.
 
但如果类型码会影响宿主类的行为,
那么最好的办法就是借助多态来处理变化行为.
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容