设计模式1——模板方法(template method)

发布时间:2026/10/22 6:48:20
设计模式1——模板方法(template method) 文章目录背景实现总结背景在软件构建过程中某一项目可能有以下特征代码结构固定函数流程固定但各个接口的实现有多个版本由于某种原因整体结构和各接口无法同时实现。同时又要应对多个子版本传统的结构化软件设计流程如下//程序库开发人员classLibrary{public:voidStep1(){//...}voidStep3(){//...}voidStep5(){//...}};//应用程序开发人员#includetemplte1_lib.hclassApplication{public:boolStep2(){//...}voidStep4(){//...}};intmain(){Librarylib();Applicationapp();lib.Step1();if(app.Step2()){lib.Step3();}for(inti0;i4;i){app.Step4();}lib.Step5();}1程序库开发人员开发1、3、5三个步骤2Applocation开发人员开发2、4、两个步骤和程序主流程如果我们步骤2、4还有两个实现版本暂且设为7、8、那么我们不仅要写出7、8两个子函数而且要重写程序主框架将Step2()和Step4()更换为Step7()和Step8()这就不符合我们设计模式的原则开放扩展关闭更改。实现我们设想是既然程序框架不变我们可以在库开发时就设计程序主流程并将会变化的2、4设计为虚函数供后续实现//程序库开发人员classLibrary{public://稳定 template methodvoidRun(){Step1();if(Step2()){//虚函数Step3();}for(inti0;i4;i){Step4();//虚函数}Step5();}virtual~Library(){}protected:voidStep1(){//稳定//.....}voidStep3(){//稳定//.....}voidStep5(){//稳定//.....}virtualboolStep2()0;//变化virtualvoidStep4()0;//变化};应用程序继承Library并实现其中的虚函数步骤2、4//应用程序开发人员classApplication:publicLibrary{protected:virtualboolStep2(){//... 子类重写实现}virtualvoidStep4(){//... 子类重写实现}};intmain(){Library*pLibnewApplication();pLib-Run();deletepLib;return0;}当步骤2、4更改时我们只需新建一个类Application2同样继承自Library并重写步骤2、4intmain(){Library*pLibnewApplication2();pLib-Run();deletepLib;return0;}pLib会根据指向对象去多态调用Step2和Step4()总结所谓模板方法就是将一些容易变化的函数接口的实现交给各个业务去实现。

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询