zoukankan      html  css  js  c++  java
  • 重构Tips

    一,重新组织函数
    1.首先找出局部变量和参数.
    1>任何不会被修改的变量都可以当作参数传入.
    2.去掉临时变量Replace Temp with Query.用查询函数代替临时变量
    3.Extract Method
    难点:有局部变量依赖.(用方法返回值的方式去赋回值)
    4.Inline Method内联函数(三段式)
    5.Introduce Explaining Variable引入解释性变量,(和2相反)
    6.Split Temporary Variable(分解临时变量:针对每次赋值,创造一个独立对应的临时变量)
    7.移除对参数的赋值(更明确,不会误解按引用传递和按值传递)
    8.已函数对象取代函数(将这个函数放进一个独立对象中,如此依赖局部变量就变成了对象内的字段.然后就可以在同一个对象中将这个大型函数分解为多个小型函数)

    二,在对象之间搬移特性
    1,Move Method(有个函数与所驻类之外的另一个类有过多的交流,调用后者或呗后者调用.那么,在该函数最常引用的类中建立一个有着类似行为的新函数,将旧函数变成一个单纯的委托函数,或是将旧函数完全移出)
    2,Move Field(搬移字段,某个字段被其所驻类之外的另一个类更多地用到)
    3,Extract Class(提炼类,将相关的字段和函数从旧类搬移到新类)
    4,隐藏"委托关系"(客户通过一个委托类去调用另一个对象)
    5,引入外加函数(你需要为提供服务的类添加一个函数,但你无法修改这个类.在客户类中建立一个函数,并以第一参数形式传入一个服务类实例)
    6,引入本地扩展(用继承或聚合的方式去做类扩展)

    三,重新组织数据
    1.自封装字段(为类字段建立getter/setter方法,并且只以这个函数访问字段)
    2.以对象取代数据值(你有一个数据项,需要与其他数据和行为一起使用才有意义)
    3.以字面量常量代替无意义数(宏定义或常量)
    4,以子类取代类型码(类继承结构,多态)
    5,用state(状态模式)/strategy(策略模式)代替类型码 ([都是用到多态的基本方式]状态模式:多个状态变换,将这些状态子类化,然后由一个state manager来管理这些状态[多态]; 策略模式:将不同算法分配到子类中去)
    6,用字段取代子类(你的各个子类的唯一差别只在"返回常量数据"的函数身上,那么修改这些函数,使他们返回超类中的某个(新增)字段,然后销毁子类)[反多态.技巧,Replace Constructor with Factory Method用工厂方法将子类实例化的过程封装在工厂方法里,从而消除对子类的引用]
    如:Peopele createMale(){return new Male();};
    Peopele p = createMale();

    四,简化函数调用
    1.Separate Query from Modifer(将查询函数和修改函数分开,类的单一化设计)
    2.Replace Parameter with Explicit Methods(以明确函数取代参数)
    如:void setValue(String name,int value){if xxxx}
    改为两个语义化且明确的方法名:
    void setName(){};
    void setValue(){};
    3.引入参数对象(有利弊,会引入结构依赖)
    4.以工厂函数取代构造函数
    如:Peopele createMale(){return new Male();};
    Peopele p = createMale();

    参考资料:<重构:改善既有代码的设计>

  • 相关阅读:
    无法与服务器建立安全链接
    OpenGL基础探究
    百度语音识别接入遇到的问题
    语音音频相关
    Gif动态图UIImage
    替换图像的某种色值
    错误
    各种须知分类等
    动画支持的一些keypath
    X pgAdmin4 重置布局 页面关不掉,要疯掉了
  • 原文地址:https://www.cnblogs.com/Quains/p/3199170.html
Copyright © 2011-2022 走看看