概述
过大的类
- 含义:
单个类做太多的事,分工不分明,重复代码多。 - 坏处:
可读性差,重则影响系统性能。 - 目标:
根据类内功能进行分类,把类提炼成多个类。 - 实现方法:
- 尽量把做相同类型工作的方法从原类中分离出来形成一个新类,考虑使用Extract Class(提炼类),如果某些函数适合作为一个子类,考虑使用Extract Subclass(提炼子类)。
- 如果一个类有太多代码,可以考虑这个类别人是如何使用的,然后考虑使用Extract Interface(提炼接口),为每一个使用方式提炼出一个接口,可以帮助你看清楚如何分解这个类。
本文涉及的重构方法
Extract Class (提炼类)
Extract Subclass (提炼子类)
- 作用:
把类中的某些可以放到子类做的事提取出来,放到子类中,优化代码结构,提高可读性. - 步骤:
- 创造一个新类,继承这个类。
- 为这个子类提供构造函数,可以通过super调用父类的构造函数,如果子类不考虑给其他人访问到,考虑使用 Replace Constructor with Factory Method(以工厂函数取代构造函数)
- 把调用父类构造函数的地方,看一下,如果需要的是这个新的子类,则改为调用新的构造函数。如果子类需要的构造函数参数和父类不同,或者子类构造函数不需要父类的某些参数,可以使用**Rename Method(函数改名)**来处理。如果不再需要父类的实例,可以将父类声明为抽象类。
- 运用 Push Down Method(函数下移) 和**Push Down Field(字段下移)**将原来类里的函数和字段移到子类里。
- 如果某些字段现在可以依靠继承特性来获取值,先用Self Encapsulate Field(自封装字段)避免直接使用他们,然后把他们的取值函数用多态特性函数替换。可以用Replace Conditional with Polymorphism(以多态取代条件函数) 重构。
- 编译,测试
- 重构思路:
当某个类涉及的方法函数过多,这个类的实例中的某些方法函数只在某些条件下被使用,可以尝试把该类作为父类,部分方法函数可以提取出来作为子类,把原来调用到这个类的实例的地方替换为对应子类。
Extract Interface(提炼接口)
- 作用:
把类中某些共用的函数方法提炼成接口,该类实现这个接口。可以优化代码结构. - 步骤:
- 新建一个空的接口
- 在接口中声明该提炼类的共通操作
- 让相关的类实现这些接口
- 调整使用者的调用代码,改为使用这些接口
- 重构思路:
某些类中,有些方法函数可能有其他类共用的方法,可以把这些方法声明为接口,并把这些类改为实现这个接口,再把调用的代码改为引用接口,可以使代码接口更加清晰,扩展性更强。
最后
以上就是朴实紫菜为你收集整理的简单易懂读《重构》 - Large Class(过大的类)的全部内容,希望文章能够帮你解决简单易懂读《重构》 - Large Class(过大的类)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复