首页 / 资讯中心 / 文章详情

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

设计模式1——模板方法(template method) ★ FEATURED ARTICLE
文章目录背景实现总结背景在软件构建过程中某一项目可能有以下特征代码结构固定函数流程固定但各个接口的实现有多个版本由于某种原因整体结构和各接口无法同时实现。同时又要应对多个子版本传统的结构化软件设计流程如下//程序库开发人员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()总结所谓模板方法就是将一些容易变化的函数接口的实现交给各个业务去实现。
阅读完成 · 觉得有帮助?
咨询建站