- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
QA Think you 重构方法-提取方法(Extract method) 重构方法-用委托来代替继承 用委托来代替继承(Replace Inheritance witch Delegation): 我们应当只在子类对超类进行扩展而不仅仅是覆写超类的部分功能时,才使用继承。 如果只是为了重用超类的某些功能的话,应该用委托来代替继承。 重构方法-用委托来代替继承 重构方法-用委托来代替继承 接着想设计个“正方形”类别﹐很多人会想到使用继承: public Square extends Rectangle { } 多好啊,什么都不用干,就可重复使用Rectangle的area()方法了。这样会有什么问题呢? 重构方法-用委托来代替继承 这个继承结构有个不足之处,Square从Rectangle继承了setWidth()和setLength() 函数,这个对Square而言是副作用的,如果给Square的setWidth()和setLength()设置不一样的值,则Square的4边就不等长了。这时可以使用委托来代替继承 重构方法-用子类代替型别码 用子类来代替型别码(Replace Type with Subclasses): 当我们的类使用型别码来表示子类的时候(例如,雇员分工程师,销售人员和管理人员),就可以使用这种重构方法。 针对每种类型分别设计子类可以消除那些根据型别码进行判别的复杂的条件判断和switch语句。 重构方法-用子类代替型别码 重构方法-用多态来代替条件判断 用多态来代替条件判断(Replace conditional with Polymorphism): 当我们发现代码中有switch语句时,可以考虑创建子类处理不同的情况,从而去掉switch语句。 重构方法-用多态来代替条件判断 重构方法-用多态来代替条件判断 多态替代Switch 重构方法-模板函数 模板函数(Form Template Method): 当我们在多个类中都有某种具有相同结构但不同细节的相似方法时就可以使用这种重构方法。 相同结构的方法放在父类中,提取出来的细节具体方法在子类中实现。 重构方法-模板函数 输出工程师员工的XML 重构方法-模板函数 输出雇员(Salesman )的XML表示方法: 重构方法-模板函数 范例:输出雇员(Manager)的XML表示方法: 重构方法-模板函数 它们之间的唯一差别就是department不同,我们把toXML方法提到父类中作为模板方法,具体细节差异方法depertmentName()在子类中实现了,在模板方法中调用那个多态方法: 重构方法-提取类(Extract class) 提取类: 当一个类变得太大或其行为逻辑组织分散时,我们需要将其分成多块内聚的行为并在需要的时候创建新类。 重构方法-提取类(Extract class) 重构方法-提取类(Extract class) 可以将与电话号码相关的行为分离到一个独立的class中: 重构方法-提取接口(Extract interface) 提取接口: 当两个classes的接口有部分相同,可以考虑提取接口。 重构方法-提取接口(Extract interface) 我们需要从MovieList中提取出来一个接口 最后就是把对MovieList的引用修改成对IMovieList的引用。我们就能为IMovieList接口创建包含mock对象在内的其他实现了。 重构方法-引入解释变量 引入解释变量(Introduce Explaining Variable): 当表达式复杂且难以理解时,我们就可以提取其中的某些部分,把中间结果保留在命名清楚的临时变量中。 把表达式切分成容易理解的片段,提高整个表达式的清晰度。 重构方法-引入解释变量 重构方法-使用工厂方法来代替构造方法 使用工厂方法来代替构造方法(Replace Constructor with Factory Method): 因为构造方法具有相同的名字,所以当存在多个构造方法时,就容易让人搞不清楚调用哪个。 对此我们使用静态工厂方法,这样就能给每个构造方法起一个有意义的名字。 重构方法-使用工厂方法来代替构造方法 重构方法-使用工厂方法来代替构造方法 重构方法-使用工厂方法来代替构造方法 重构方法-使用符号常量来代替魔幻数字 使用符号常量来代替魔化数字(Replace Magic Number with Symbolic Constant) 在代码中硬性编码的数值是一种非常不好的习惯。这样的数值很难分辨,改变它们会引起霰弹式手术,其实这也是一种重复。 可以用命名良好的符号常量来代替它们。 重构方法-使用符号常量来代替魔幻数字 重构方
原创力文档


文档评论(0)