简单易懂读《重构》 - Large Class(过大的类)

过大的类

  • 含义:
    单个类做太多的事,分工不分明,重复代码多。
  • 坏处:
    可读性差,重则影响系统性能。
  • 目标:
    根据类内功能进行分类,把类提炼成多个类。
  • 实现方法:
    • 尽量把做相同类型工作的方法从原类中分离出来形成一个新类,考虑使用Extract Class(提炼类),如果某些函数适合作为一个子类,考虑使用Extract Subclass(提炼子类)
    • 如果一个类有太多代码,可以考虑这个类别人是如何使用的,然后考虑使用Extract Interface(提炼接口),为每一个使用方式提炼出一个接口,可以帮助你看清楚如何分解这个类。

本文涉及的重构方法

Extract Class (提炼类)
Extract Subclass (提炼子类)
  • 作用:
    把类中的某些可以放到子类做的事提取出来,放到子类中,优化代码结构,提高可读性.
  • 步骤:
  1. 创造一个新类,继承这个类。
  2. 为这个子类提供构造函数,可以通过super调用父类的构造函数,如果子类不考虑给其他人访问到,考虑使用 Replace Constructor with Factory Method(以工厂函数取代构造函数)
  3. 把调用父类构造函数的地方,看一下,如果需要的是这个新的子类,则改为调用新的构造函数。如果子类需要的构造函数参数和父类不同,或者子类构造函数不需要父类的某些参数,可以使用**Rename Method(函数改名)**来处理。如果不再需要父类的实例,可以将父类声明为抽象类。
  4. 运用 Push Down Method(函数下移) 和**Push Down Field(字段下移)**将原来类里的函数和字段移到子类里。
  5. 如果某些字段现在可以依靠继承特性来获取值,先用Self Encapsulate Field(自封装字段)避免直接使用他们,然后把他们的取值函数用多态特性函数替换。可以用Replace Conditional with Polymorphism(以多态取代条件函数) 重构。
  6. 编译,测试
  • 重构思路:
    当某个类涉及的方法函数过多,这个类的实例中的某些方法函数只在某些条件下被使用,可以尝试把该类作为父类,部分方法函数可以提取出来作为子类,把原来调用到这个类的实例的地方替换为对应子类。
Extract Interface(提炼接口)
  • 作用:
    把类中某些共用的函数方法提炼成接口,该类实现这个接口。可以优化代码结构.
  • 步骤:
  1. 新建一个空的接口
  2. 在接口中声明该提炼类的共通操作
  3. 让相关的类实现这些接口
  4. 调整使用者的调用代码,改为使用这些接口
  • 重构思路:
    某些类中,有些方法函数可能有其他类共用的方法,可以把这些方法声明为接口,并把这些类改为实现这个接口,再把调用的代码改为引用接口,可以使代码接口更加清晰,扩展性更强。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值