模板模式Template Method

模板模式Template Method模板模式Template Method组件协作典型模式案例模式定义重要总结组件协作现代软件专业分工之后的第一个结果是“框架与应用程序的划分”,”组件协作”模式通过晚期绑定,来实现框架与应用程序之间的松耦合,是两者之间协作时常用的模式典型模式Template MethodStrategyObserver / Event动机在软件构造过程中,对某一项任务,它常常有稳定的的整体操作骨架,但各个子步骤 却有很多改变的需求,或者由于固有的原因,(比如框架和应用之间的关系)而无法和任务的整体结构同时

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

组件协作

现代软件专业分工之后的第一个结果是“框架与应用程序的划分”,”组件协作”模式通过晚期绑定,来实现框架与应用程序之间的松耦合,是两者之间协作时常用的模式

典型模式

  • Template Method
  • Strategy
  • Observer / Event

动机

在软件构造过程中,对某一项任务,它常常有稳定的的整体操作骨架,但各个子步骤 却有很多改变的需求,或者由于固有的原因,(比如框架和应用之间的关系)而无法和任务的整体结构同时实现

如何在确定稳定操作结构的前提下,来灵活应对各个子步骤的变化或晚期实现需求?

案例

使用模板方法前

//程序开发人员
class Library
{ 
   
private:
public:
    void step1(){ 
   
        //..
    }
    void step3(){ 
   
        //..
    }
    void step5(){ 
   
        //..
    }
};

//应用程序开发人员
class Application
{ 
   
public:
bool step2(){ 
   
    //..
}
bool step4(){ 
   
    //..
}
};

int main(){ 
   
    Library lib();
    Application app();

    lib.Step1();
    if(app.Step2()){ 
   
        lib.Step3();
    }
    for(int i = 0;i < 4;i ++){ 
   
        app.Step4();
    }

    lib.Step5();
}

使用模板方法后

//程序库开发人员
class Library
{ 
   
private:
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 bool Step4() = 0;//变换
};


//应用程序开发人员
class Application
{ 
   
protected:
    virtual bool Step2(){ 
   
        //..子类重写
    }
    virtual bool Step4(){ 
   
        //..子类重写
    }
};

int main(){ 
   
    Library * Plib = new Application();
    lib-Run();
    delete Plib;
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

模式定义

定义一个操作中的算法的骨架(稳定),而将一些步骤延迟(变化)到子类中。Template Method使得子类可以不改变(复用)一个算法的结构即可重定义(override重写)该算法的某些特定步骤

重要总结

  • Template Method模式是一种非常基础的设计模式,再面向对象系统中有大量的应用,它用最简洁的机制(虚函数的多态),为很多应用程序框架提供了灵活的扩展点,是代码复用方面的实现结构。
  • 除了可以灵活应对子步骤的变换外,“不要调用我,让我来调用你”的反向控制结构Template Method的典型应用
  • 在具体实现方面,被Template Method调用的虚方法可以实现,也可以没有任何实现(抽象方法,纯虚方法)一般设置他们为protected方法。

笔记

  • 扩展点:继承+虚函数就是扩展
  • 反向控制结构“不要调用我,让我来调用你” –> library调用用户代码 晚绑定
  • 函数指针也是晚绑定机制
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/168515.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • BufferedWriter[通俗易懂]

    BufferedWriter[通俗易懂]  带有默认缓冲的字符输出流。使用:  构造:BufferedWriterbf=newBufferedWriter(“outFilePath”);  写入:write(“thing”);  换行:newLine();  刷新缓冲区,会将内容写进目标文件:flush();  关闭该流的操作:close();importjava.io.BufferedWrit…

  • matlab控制系统仿真教程答案唐(matlab求传递函数的极点)

    简单的控制算法,没有用Simulink工具,直接写代码。主要点就是分清楚仿真环境和需要验证的算法。也就是说首先要数学建模,建立一个‘环境’,用来模拟实际环境。然后写自己的控制算法。最后把算法用到‘环境’上,就是在仿真了。全部代码如下:%Thesimulationofthestablependulumcart%usingPID,poleplacementandLQRclc;clea…

  • 解决方案-vector初始化后存放Mat,出现Mat矩阵数据同变问题

    解决方案-vector初始化后存放Mat,出现Mat矩阵数据同变问题提供解决方案-vector初始化后存放Mat,出现Mat矩阵数据同变问题

  • 什么叫做公网IP_是不是公网ip

    什么叫做公网IP_是不是公网ip由于公网ip资源匮乏,NAT(地址转换)技术被广泛应用。其好处就是让更多的电脑能够上网,缺点在于你自己搭建了一台服务器。想实现远程访问,如果服务器的地址如果是经过NAT转换后的地址,外网是无法访问到的。这就引出了公网ip和私网ip的概念,可以通过开头的数字来判断ip地址的类型,下面就给大家普及一下。由于私网ip地址仅限于局域网内使用,并且是可以重复的,所以IANA当初划分了一些网段,专供局域网内使用。具体网段如下:10.x.x.x192.168.x.x172.16.x.x-172.3

    2022年10月21日
  • DB2数据库_db2查询所有表

    DB2数据库_db2查询所有表必需步骤:您已经启用了DB2扩展Windows安全性。您必须将运行DB2本地应用程序或工具的DB2用户添加至DB2ADMNS或DB2USER组可以使用端口号"50

  • Response.Write具体介绍

    Response.Write具体介绍

    2021年12月10日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号