模板模式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)


相关推荐

  • Mybatis二级缓存原理

    Mybatis二级缓存原理记录是一种精神,是加深理解最好的方式之一。最近看了下Mybatis的源码,分析了二级缓存的实现方式,在这里把他记下来。虽然这不复杂,对这方面的博客也有很多,写的也很好。但我坚信看懂了是其一,能够教别人或者描述清楚记下来才能真正的掌握。曹金桂cao_jingui@163.com(如有欠缺还请指教)时间:2016年10月11日16:00这篇文章能够帮你学会对Mybatis配置…

  • Fedora 12 环境搭建[通俗易懂]

    Fedora 12 环境搭建[通俗易懂]又来折腾发行版了。这一回是Fedora12,搞的挺艰难的下载了Fedora-12-i386-DVD.iso,无论使用ultraiso还是dd都无法安装。后来下载了一个ImageWriter.exe(o

  • C语言正则表达式

    C语言正则表达式POSIX规定了正则表达式的C语言库函数,详见regex(3)。我们已经学习了很多C语言库函数的用法,读者应该具备自己看懂man手册的能力了。本章介绍了正则表达式在grep、sed、awk中的用法,学习要能够举一反三,请读者根据regex(3)自己总结正则表达式在C语言中的用法,写一些简单的程序,例如验证用户输入的IP地址或email地址格式是否正确。C语言处理正则表达式常用的函数有…

  • PHP开发WebaPP教程,开发webapp 需要什么技术基础吗? html5 js css3 PHP 除了这些还需要什么?…

    PHP开发WebaPP教程,开发webapp 需要什么技术基础吗? html5 js css3 PHP 除了这些还需要什么?…开发webapp需要什么技术基础吗?或者有没有开发webapp视频教程或者资料求推荐下回复内容:开发webapp需要什么技术基础吗?或者有没有开发webapp视频教程或者资料求推荐下数据库:比如mysqlSQL语言:对数据库编程的语言web容器:比如apache,nginx你还需要了解一些项目管理工具,如maven,svn,git等另外一些基础知识,如http、https协议等话说ap…

  • 【ProseMirror学习笔记 3 】—— schema

    【ProseMirror学习笔记 3 】—— schemaschemaschema介绍nodetypesContentExpressionstodogroupMarksAttributesSerializationandParsing   schema介绍每个Prosemirrordocument都有一个与之相关的schema.这个schema描述了document中的的nodes类型,和nodes们的嵌套关系.例如,schema可以规定,顶级节点可以包含一个或者更多的blo

  • Oracle 11g安装图文攻略「建议收藏」

    Oracle 11g安装图文攻略「建议收藏」Oracle11g****安装图文攻略一、Oracle下载注意Oracle分成两个文件,下载完后,将两个文件解压到同一目录下即可。路径名称中,最好不要出现中文,也不要出现空格等不规则字符。官方下地址:http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html以下两网址来源此官方下载页网。win32位操作系统下载地址:http://download.oracle.com/otn/nt

发表回复

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

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