【重构-改善代码的设计】《重构-改善代码的设计》学习笔记-Part2(菜鸟晋升之路)

本文详述了重构代码的各种技巧,包括简化函数调用、处理概括关系和进行大型重构的方法。从函数改名到提炼继承体系,提供了实用的指导,帮助开发者改善代码结构,提升软件质量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

         8 简化函数调用

8.1 Rename Method(函数改名)

8.2  Add Parameter(添加参数)

8.3 Remove Parameter(移除参数)

8.4 Separate Query from Modifier(将查询函数和修改函数分离)

8.5 Parameterize Method(令函数携带参数)

8.6 Replace Parameter with Explicit Methods(以明确函数取代参数)

8.9 Introduce Parameter Object(引入参数对象)

8.10 Remove Setting Method(移除设值函数)

8.11 Hide Method(隐藏函数)

8.12 Replace Constructor with Factory Method(以工厂函数取代构造函数)

8.13 En capsulate Downcast(封装向下转型)

8.14 Replace Error Code with Exception(以异常取代错误码)

8.15 Replace Exception with Test(以测试取代异常)

          9 处理概括关系

9.1 Pull Up Field (字段上移)

9.2 Pull Up Method (函数上移)

9.3 Pull Up Constructor Body(构造函数本体上移)

9.4 Push Down Method(函数下移)

9.5 Push Down Field(字段下移)

9.6 Extract Subclass(提炼子类)

9.7  Extract Superclass(提炼超类)

9.8 Extract Interface(提炼接口)

9.9 Collapse Hierarchy(折叠继承体系)

9.10 From Template Method(塑造模板函数)

9.11 Replace Inheritance with Delegation(以委托取代继承)

9.12 Replace Delegation with Inheritance(以继承取代委托)

         10 大型重构

10.1 Tease Apart Inheritance(梳理并分解继承体系)

10.2 Convert Procedural Design to Objects(将过程化设计转化为对象设计)

10.3 Separate Domain from Presentation(将领域和表述/显示分离)

10.4 Extract Hierarchy(提炼继承体系)


8 简化函数调用

8.1 Rename Method(函数改名)

8.2  Add Parameter(添加参数)

8.3 Remove Parameter(移除参数)

8.4 Separate Query from Modifier(将查询函数和修改函数分离)

8.5 Parameterize Method(令函数携带参数)

       若两个或多个函数做着类似的工作,但因少数几个值致使行为略有不同。这种情况下,你可以将这些各自分离的函数统一起来,并通过参数来处理那些变化情况,用以简化问题。以“可将少量数值视为参数”为依据,找出带有重复性的代码。

8.6 Replace Parameter with Explicit Methods(以明确函数取代参数)

8.9 Introduce Parameter Object(引入参数对象)

8.10 Remove Setting Method(移除设值函数)

8.11 Hide Method(隐藏函数)

8.12 Replace Constructor with Factory Method(以工厂函数取代构造函数)

1. 根据整数(实际是类型码)创建对象

2. 根据字符串创建子类对象。Class.forName():它向用户暴露了子类名称

3. 以明确函数创建子类

8.13 En capsulate Downcast(封装向下转型)

Object lastReading(){

     return readings.lastElement();

}------>

Reading lastReading(){

    return (Reading) readings.lastElement();

}

8.14 Replace Error Code with Exception(以异常取代错误码)

8.15 Replace Exception with Test(以测试取代异常)

9 处理概括关系

        pull up field 和 pull up method 都用于将特性向继承体系的上端移动,push down method 和 push down field 则将特性向继承体系的下端移动。构造函数比较难以向上拉动,因此专门有一个pull up constructors body 处理它,我们不会将构造函数往下推,因为replace constructors with factory method 通常更管用。

9.1 Pull Up Field (字段上移)

两个子类拥有相同的字段,将该字段移至超类。

9.2 Pull Up Method (函数上移)

有些函数,在各个子类中产生完全相同的结果,将该函数移至超类。

9.3 Pull Up Constructor Body(构造函数本体上移)

9.4 Push Down Method(函数下移)

9.5 Push Down Field(字段下移)

9.6 Extract Subclass(提炼子类)

9.7  Extract Superclass(提炼超类)

9.8 Extract Interface(提炼接口)

若干客户使用类接口中的同一个子集,或者两个类的接口有部分相同,将相同的子集提炼到一个独立接口中。

       类之间有彼此互用的方式有若干种。“使用一个类”通常意味着用到类的所有责任区。另一种情况是,某一组客户只使用类责任区中的一个特定子集。再一种情况则是,这个类需要与所有协助处理某些特定请求的类合作。

9.9 Collapse Hierarchy(折叠继承体系)

超类和子类之间无太大区别,将它们合为一体。

9.10 From Template Method(塑造模板函数)

    你有一些子咧,其中相应的某些函数以相同顺序执行类似的操作,但各个操作的细节上有所不同,将这些操作分别放进独立函数中,并保持它们都有相同的签名,于是原函数也就变得相同了。然后将原函数上移至超类。

9.11 Replace Inheritance with Delegation(以委托取代继承)

9.12 Replace Delegation with Inheritance(以继承取代委托)

10 大型重构

10.1 Tease Apart Inheritance(梳理并分解继承体系)

       某个继承体系同时承担两项责任。建立两个继承体系,并通过委托关系让其中一个可以调用另一个。

       要指出继承体系是否承担了两项不同的责任并不困难:如果继承体系中的某个特定层级上的所有类,其子类名称都以相同的形容词开始,那么这个体系很可能就是承担着两项不同的责任。

10.2 Convert Procedural Design to Objects(将过程化设计转化为对象设计)

10.3 Separate Domain from Presentation(将领域和表述/显示分离)

10.4 Extract Hierarchy(提炼继承体系)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值