我是靠谱客的博主 朴实紫菜,最近开发中收集的这篇文章主要介绍简单易懂读《重构》 - 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. 调整使用者的调用代码,改为使用这些接口
  • 重构思路:
    某些类中,有些方法函数可能有其他类共用的方法,可以把这些方法声明为接口,并把这些类改为实现这个接口,再把调用的代码改为引用接口,可以使代码接口更加清晰,扩展性更强。

最后

以上就是朴实紫菜为你收集整理的简单易懂读《重构》 - Large Class(过大的类)的全部内容,希望文章能够帮你解决简单易懂读《重构》 - Large Class(过大的类)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(48)

评论列表共有 0 条评论

立即
投稿
返回
顶部