zoukankan      html  css  js  c++  java
  • 北风设计模式课程---模板方法模式与策略模式的区别

    北风设计模式课程---模板方法模式与策略模式的区别

    一、总结

    一句话总结:

    整体替换 >< 特定点替换:策略模式更注重于: 一个“策略”是一个 整体的(完整的) 算法,算法是可以被整体替换的。而模板方法只能被替换其中的特定点,算法流程是固定不可变的。

    1、模板方法模式与策略模式的思想的区别?

    模板方法模式:算法流程固定,节点替换:定义一个算法流程,将一些特定步骤的具体实现、延迟到子类。使得可以在不改变算法流程的情况下,通过不同的子类、来实现“定制”流程中的特定的步骤。
    策略模式:整体替换:使不同的算法可以被相互替换,而不影响客户端的使用。

    二、模板方法模式与策略模式的区别

    转自或参考:模板方法模式与策略模式的区别
    https://blog.csdn.net/hudashi/article/details/50978969

    原文:http://www.tuicool.com/articles/6JBN7z3

    如果你还不了解模板方法模式策略模式,请先阅读《策略模式(strategy)》和《模板方法模式

    模板方法模式的主要思想:定义一个算法流程,将一些特定步骤的具体实现、延迟到子类。使得可以在不改变算法流程的情况下,通过不同的子类、来实现“定制”流程中的特定的步骤。

    策略模式的主要思想:使不同的算法可以被相互替换,而不影响客户端的使用。

    在思想和意图上看,模板方法更加强调:
    1)定义一条线(算法流程),线上的多个点是可以变化的(具体实现在子类中完成),线上的多个点一定是会被执行的,并且一定是按照特定流程被执行的。
    2)算法流程只有唯一的入口,对于点的访问是受限的【通常用受保护的虚函数来定义可变点】。

    策略模式更注重于: 一个“策略”是一个 整体的(完整的) 算法,算法是可以被整体替换的。而模板方法只能被替换其中的特定点,算法流程是固定不可变的。

    在这样的细节上看来,模板方法 和 一组策略模式 是不可以划等号的。

    在这板方法面前,似乎 “优先使用对象组合,而不是继承” 的策略模式 很是趾高气昂?我个人还是觉得、各有优缺,只是各自适应的场景不一样而已。当遇到“多个变化点独立变化”时,这时就需要策略模式来救场了,如若不然,原有架构可以很好地进行维护和扩展,那还有必要去大动干戈、非要去找到那个暂时最完美的答案吗?似乎没有吧。

     

    附参考资料《设计模式精解》




     

     

     

     
  • 相关阅读:
    Leetcode 1489找到最小生成树李关键边和伪关键边
    Leetcode 113 路径总和 II
    hdu 1223 还是畅通工程
    hdu 1087 Super Jumping! Jumping! Jumping!
    hdu 1008 Elevator
    hdu 1037 Keep on Truckin'
    湖工oj 1241 畅通工程
    湖工oj 1162 大武汉局域网
    hdu 2057 A + B Again
    poj 2236 Wireless Network
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/11079928.html
Copyright © 2011-2022 走看看