zoukankan      html  css  js  c++  java
  • 『重构--改善既有代码的设计』读书笔记----Substitute Algorithm

    重构可以把复杂的东西分解成一个个简单的小块。但有时候,你必须壮士断腕删掉整个算法,用简单的算法来取代,如果你发现做一件事情可以有更清晰的方式,那你完全有理由用更清晰的方式来解决问题。如果你开始使用程序库,发现其中库提供的功能特性和你的代码重复,那么你也应该改变你原来的算法。或者当你想要修改原先的算法,让他去做一件和原先略有差异的事情,这时候你也可以把原先的算法替换成一个较易修改的算法,让后续修改来的简单点。

    使用这个手法之前,确保自己已经充分了解原先函数,替换巨大而复杂的算法是很复杂的,你可以先运用Extract Method将他进行分解,变成简单的小型函数,你才能有把握的进行算法替换工作。

    做法:

    • 准备好另一个替换算法,让他通过编译。
    • 针对现有测试,执行上述新算法,如果结果和原先结果完全一致,重构结束。
    • 如果测试结果出现不同,以旧算法作为参考标准。针对每个测试用例分别进行新旧两个算法的执行,观察哪个测试用例出现问题,以及你遇到的麻烦。

    例子:

    QString findPerson(QStringList person)
    {
        for (int i = 0; i < person.count(); ++i)
        {
           if(person.at(i) == "Don") 
               return "Don";
           else if (person.at(i) == "John")
               return "John";
           else if (person.at(i) == "Kent")
               return "Kent";
        }
        return "";
    }

    发现这种需要修改内部算法,我们准备了另外的算法,然后进行编译测试,然后进行替换

    QString findPerson(QStringList person)
    {
        QStringList perList = QStringList() << "Don" << "John" << "Kent";
    
        for (int i = 0; int i < person.count(); ++int i)
        {
            if (perList.contains(person.at(i)))
                return person.at(i);
        }
        return "";
    }

    当通过测试用例之后,我们就可以判定我们完成了算法替换的重构。

  • 相关阅读:
    C#快速随机按行读取大型文本文件
    OpenReadWithHttps
    fiddler不能监听 localhost和 127.0.0.1的问题 .
    C#放缩、截取、合并图片并生成高质量新图的类
    JS判断只能是数字和小数点
    HTML5 Support In Visual Studio 2010
    GridView 获取列字段的几种途径
    微信朋友圈如何同时分享(图片+文字) Android版
    【Android】 PopupWindow使用小结
    Android 第三方应用接入微信平台(2)
  • 原文地址:https://www.cnblogs.com/rickyk/p/4157051.html
Copyright © 2011-2022 走看看