• 模板方法


    模板方法Template Method模式

    在稳定的整体操作结构中,子步骤可以进行变化来满足需求

    template_lin.cpp

     1 //程序库开发人员
     2 class Library{
     3 
     4 public:
     5     void Step1(){
     6         //...
     7     }
     8 
     9     void Step3(){
    10         //...
    11     }
    12 
    13     void Step5(){
    14         //...
    15     }
    16 };

    template1_app.cpp

     1 //应用程序开发人员
     2 class Application{
     3 public:
     4     bool Step2(){
     5         //...
     6     }
     7 
     8     void Step4(){
     9         //...
    10     }
    11 };
    12 
    13 int main()
    14 {
    15     Library lib();
    16     Application app();
    17 
    18     lib.Step1();
    19 
    20     if (app.Step2()){
    21         lib.Step3();
    22     }
    23 
    24     for (int i = 0; i < 4; i++){
    25         app.Step4();
    26     }
    27 
    28     lib.Step5();
    29 
    30 }

    这种方式为早绑定在Application去调用Library。

    template2_lib.cpp

    class Library{
    public:
        //稳定 template method
        void Run(){
            
            Step1();
    
            if (Step2()) { //支持变化 ==> 虚函数的多态调用
                Step3(); 
            }
    
            for (int i = 0; i < 4; i++){
                Step4(); //支持变化 ==> 虚函数的多态调用
            }
    
            Step5();
    
        }
        virtual ~Library(){ }
    
    protected:
        
        void Step1() { //稳定
            //.....
        }
        void Step3() {//稳定
            //.....
        }
        void Step5() { //稳定
            //.....
        }
    
        virtual bool Step2() = 0;//变化
        virtual void Step4() =0; //变化
    };

    template2_app.cpp

    //应用程序开发人员
    class Application : public Library {
    protected:
        virtual bool Step2(){
            //... 子类重写实现
        }
    
        virtual void Step4() {
            //... 子类重写实现
        }
    };
    
    
    
    
    int main()
        {
            Library* pLib=new Application();
            lib->Run();
    
            delete pLib;
        }
    }

    该种为晚绑定,Library中通过虚函数的方式来调用子类中方法

    Template method模式即在软件构建中,具有稳定的操作结构(即代码运行逻辑稳定)但子步骤是变化的,

    该模式意为稳定操作结构在父类中实现,变化的步骤延迟(虚函数)到子类中。

    上面代码中代码1即操作结构在main()函数中实现,以早绑定方式去调用库。

    代码2即将操作结构在父类中实现,以虚函数Step2(),Step4()的方式在延迟在子类中实现,只需要将变化的步骤在子类中重定义即可。

    完全稳定和完全变化的结构都不适用设计模式,设计模式为在软件设计时分离稳定和变化的部分,来实现代码复用。

    拓宽一下思路:如果这个流程中的各个步骤不是固定的,该如何设计呢?其实,应用层可以自己动态配置调用步骤。即可调用已有的接口满足小白用户需求,也可构建复杂流程完成专家级需求

    run方法中的流程可以任意改变,只需通过动态配置即可,但流程中的各个变化任然可以通过子类的继承来实现多态

    其实真正如的工业级代码非常复杂:模板方法模式中的稳定部分run不在模板类中,而在另外一个类中,这个流程是由若干类相互协作共同完成。

  • 相关阅读:
    vscode远程开发
    iframe父子组件传值
    react项目地址栏添加包名
    记一次lombok踩坑记
    Android Adb修改系统时区 NTP 服务器
    ES文件浏览器4.1.9.7.4任意文件浏览漏洞
    SUID提权之python的os.setuid(0)提权
    PHP-8.1.0-dev 后门命令执行
    将博客搬至CSDN
    零基础快速上手HarmonyOS开发1---为什么要学习HarmonyOS?如何能快速上手?HarmonyOS架构解析、和Android深度对比
  • 原文地址:https://www.cnblogs.com/miaorn/p/14354605.html
Copyright © 2020-2023  润新知