美文网首页
换个方式读书

换个方式读书

作者: ross_zhao | 来源:发表于2020-11-21 22:52 被阅读0次

    《重构》虽然是本神作,但是内容过于琐碎,《重构与模式》恰恰能帮助解决心理上和软件上的问题。
    之前在班车上陆续读完了,可是忘了,缺少实操,浏览式读书太容易忘记了。

    所以我打算换个方式。不按目录读书,而是按照代码坏味道对应的修复模式捋一捋。

    图无法下载,倒是百度到一篇好文章,摘录一下啊
    侵权即删。
    <table bordercolor="#82c1d8" cellspacing="0" cellpadding="2" width="98%" align="center" border="1" unselectable="on" auto?="">
    <tbody>
    <tr style="font-weight: bold; color: rgba(255, 255, 255, 1); height: 30px; background-color: rgba(73, 164, 199, 1); text-align: center">
    <td width="30%">代码的坏味道</td>
    <td width="35%">一般重构方法</td>
    <td width="35%">使用模式重构</td>
    </tr>
    <tr>
    <td width="30%"><strong>重复代码</strong></td>
    <td width="35%">提炼方法
    提取类
    方法上移
    替换算法
    链构造方法
    </td>
    <td width="35%">构造Template Method
    以Composite取代一/多之分
    引入Null Object
    用Adapter统一接口
    用Fatory Method引入多态创建</td>
    </tr>
    <tr>
    <td><strong>过长方法</strong></td>
    <td>提取方法
    组合方法
    以查询取代临时变量
    引入参数对象
    保持对象完整</td>
    <td>转移聚集操作到Vistor
    以Strategy取代条件逻辑
    以Command取代条件调度程序
    转移聚集操作到Collecting Parameter</td>
    </tr>
    <tr>
    <td><strong>过长参数列</strong></td>
    <td>以方法取代参数
    引入参数对象
    保持对象完整</td>
    <td> </td>
    </tr>
    <tr>
    <td><strong>条件逻辑过度复杂</strong></td>
    <td>分解条件式
    合并条件式
    合并重复的条件片段
    移除控制标记
    以卫语句取代嵌套条件式
    以多态取代条件式
    引入断言</td>
    <td>以Strategy取代条件逻辑
    转移装饰功能到Decorator
    以State取代状态改变条件语句
    引入Null Object</td>
    </tr>
    <tr>
    <td><strong>分支语句</strong></td>
    <td>提取方法
    转移方法
    以子类取代类型代码
    以多态取代条件式
    已明确方法取代参数</td>
    <td>以State/Strategy取代类型代码
    引入Null Object
    以Command替换条件调度程序
    转移聚集操作到Visitor</td>
    </tr>
    <tr>
    <td><strong>基本类型迷恋
    </strong>程序代码过于依赖基本类型(int,string,double,array等低层次语言要素)</td>
    <td>以对象取代数据值
    以类型取代类型代码
    以子类取代类型代码
    提取类
    引入参数对象
    以对象取代数组</td>
    <td>以State取代状态改变条件语句
    以Strategy取代条件逻辑
    以Composite取代隐含树
    以Interpreter取代隐式语言
    转移装饰功能到Decorator
    用Builder封装Composite</td>
    </tr>
    <tr>
    <td><strong>数据泥团</strong>
    在类的字段和参数列中,总是一起出现的数据</td>
    <td>提取类
    引入参数对象
    保持对象完整</td>
    <td> </td>
    </tr>
    <tr>
    <td><strong>令人迷惑的临时字段</strong></td>
    <td>提取类</td>
    <td>引入Null Object</td>
    </tr>
    <tr>
    <td><strong>组合爆炸
    </strong>许多段代码使用不同种类或数量的数据或对象做同样的事情(例如使用特定条件和数据库查询)</td>
    <td> </td>
    <td>以Interpreter取代隐式语言</td>
    </tr>
    <tr>
    <td><strong>过大类</strong></td>
    <td>提取类
    提取子类
    提取接口
    复制被监视数据</td>
    <td>以Command取代条件调度程序
    以State取代状态改变条件语句
    以Interpreter取代隐式语言</td>
    </tr>
    <tr>
    <td><strong>冗赘类</strong>
    不再做很多工作或没有用的类</td>
    <td>折叠继承关系
    内联Singleton</td>
    <td> </td>
    </tr>
    <tr>
    <td><strong>不恰当的暴露
    </strong>在客户代码中不应看到类的字段和方法,却是公开可见的</td>
    <td>封装字段
    封装群集
    移除设置方法
    隐藏方法</td>
    <td>用Factory封装类</td>
    </tr>
    <tr>
    <td><strong>发散式变化</strong>
    类经常因为不同的原因在不同方向上发生变化,显然是违反了单一职责原则</td>
    <td>提取类</td>
    <td> </td>
    </tr>
    <tr>
    <td><strong>霰弹式修改</strong>
    如果遇到变化,必须在不同的类中作出相应的修改</td>
    <td>转移方法
    转移字段
    内联类</td>
    <td>将创建知识搬移到Factory</td>
    </tr>
    <tr>
    <td><strong>依恋情结
    </strong>方法对于某个类的兴趣高过对自己所处的宿主类</td>
    <td>转移方法
    提取方法</td>
    <td>引入Strategy
    引入Visitor</td>
    </tr>
    <tr>
    <td><strong>平行继承体系
    </strong>当为一个类增加一个子类时,也必须在另一个类中增加一个相应的子类</td>
    <td>转移方法
    转移字段</td>
    <td> </td>
    </tr>
    <tr>
    <td><strong>夸夸其谈未来性</strong></td>
    <td>折叠继承关系
    内联类
    移除参数
    移除方法</td>
    <td> </td>
    </tr>
    <tr>
    <td><strong>过度耦合的消息连
    </strong>不断的向一个对象索求另一个对象</td>
    <td>隐藏委托
    提取方法
    转移方法</td>
    <td>使用抽象引入Chain Of Responsibility</td>
    </tr>
    <tr>
    <td><strong>中间转手人
    </strong>类接口中有很多方法都委托给其他类</td>
    <td>移除中间转手人
    内联方法
    以继承取代委托</td>
    <td> </td>
    </tr>
    <tr>
    <td><strong>狎昵关系
    </strong>类之间彼此依赖于其private成员</td>
    <td>转移方法
    将双向关联改为单向
    提取类
    隐藏委托
    以继承取代委托</td>
    <td> </td>
    </tr>
    <tr>
    <td><strong>异曲同工的类</strong></td>
    <td>重命名方法
    转移方法
    提取超类</td>
    <td>用Adapter统一接口</td>
    </tr>
    <tr>
    <td><strong>不完善的程序库类</strong></td>
    <td>引入外加方法
    引入本地扩展</td>
    <td>用Adapter统一接口
    用Facade封装类</td>
    </tr>
    <tr>
    <td><strong>纯稚的数据类
    </strong>只拥有字段的数据类</td>
    <td>封装字段
    封装集合
    移除设置方法
    转移方法
    隐藏方法</td>
    <td> </td>
    </tr>
    <tr>
    <td><strong>被拒绝的遗赠
    </strong>继承父类时,子类想要选择继承的成员</td>
    <td>以委托取代继承</td>
    <td> </td>
    </tr>
    <tr>
    <td><strong>过多的注释
    </strong>为糟糕的代码写大量的注释</td>
    <td>使用一起重构方法,使方法本身达到自说明的效果,让注释显得多余</td>
    <td> </td>
    </tr>
    <tr>
    <td><strong>怪异解决方案
    </strong>在同一系统中使用不同的方式解决同一问题</td>
    <td>替换算法</td>
    <td>用Adapter统一接口</td>
    </tr>
    </tbody>
    </table>

    link

    相关文章

      网友评论

          本文标题:换个方式读书

          本文链接:https://www.haomeiwen.com/subject/clryiktx.html