设计模式之模式方法——C++
2021/6/6 12:22:26
本文主要是介绍设计模式之模式方法——C++,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
一、类别
Template Method属于组件协作模式。 组件写作模式通过晚期绑定,来实现框架与应用程序之间的松耦合,是二者之间协作时常用的模式。 典型模式:Template Method、Observer / Event、Strategy
二、定义
定义一个操作中的算法的骨架(稳定),而将一些步骤延迟(变化)到子类中。Template Method使得子类可以不改变(复用)一个算法的结构即可重定义(重写)该算法的某些特定步骤。
三、代码对比
背景:对于应用程序的开发,一般是先创建Library,再创建Application,然后按照固定的步骤开始运行。
- 结构化软件实现方法:
class Library { public: void step1() { cout << "step1" << endl; } void step3() { cout << "step3" << endl; } }; class Application { public: void step2() { cout << "step2" << endl; } void step4() { cout << "step4" << endl; } }; int main() { Library lib; Application app; lib->step1(); app->step2(); lib->step3(); app->step4(); system("pause"); return 0; }
这是一种早绑定:先实现Library,实现的具体流程在Application中,具体流程的实现依赖于Library。
- 采用Template Method
class Library { public: void run() { step1(); step2(); step3(); step4(); } protected: void step1() { cout << "step1" << endl; } void step3() { cout << "step3" << endl; } virtual void step2() = 0; virtual void step4() = 0; }; class Application : public Library { protected: virtual void step2() { cout << "step2" << endl; } virtual void step4() { cout << "step4" << endl; } }; int main() { Library *lib = new Application; lib->run(); system("pause"); return 0; }
这是一种晚绑定:先实现Library,Library中有实现流程,其中的流程依赖于较晚实现的Application。
四、要点总结
- Template Method用虚函数的多态性为应用程序框架提供了灵活的扩展点,是代码复用方面的基本实现结构。
- 除了可以灵活应对子步骤的变化外,“不要调用我,让我来调用你”的反向控制结构的Template Method的典型应用。
- 在具体实现方面,被Template Method调用的虚函数推荐设置为protected方法,因为其只是框架的一步,不需要开放给外界,所以不该为public。同时,它也不应属于private。
这篇关于设计模式之模式方法——C++的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-06-28易优新手必读安装教程-icode9专业技术文章分享
- 2024-06-28忘记eyoucms后台密码怎么办?-icode9专业技术文章分享
- 2024-06-26终极指南:Scrum中如何设置需求优先级
- 2024-06-26AI大模型企业应用实战(25)-为Langchain Agent添加记忆功能
- 2024-06-26小白家庭 nas 搭建方案-icode9专业技术文章分享
- 2024-06-23AI大模型企业应用实战(14)-langchain的Embedding
- 2024-06-23AI大模型企业应用实战(15)-langchain核心组件
- 2024-06-23AI大模型企业应用实战(16)-langchain核心组件
- 2024-06-23AI 大模型企业应用实战(06)-初识LangChain
- 2024-06-19EntBot.ai: AI Website Chatbot for Product Guides and Development Doc