模板方法原理与C++实现

定义

定义一个操作中的算法骨架(稳定的),而将一些步骤的实现延迟到子类中(变化的)。模板方法使得子类可以复用一个算法的结构,而只改变(重写)这个算法的特定步骤。

C++实现

class Library {
public:
	virtual ~Library() {}
	// template method
	void run() 
	{
		step1();
		step2();
		step3();
	}
protected:
	virtual void step1() = 0;
	virtual void step2() = 0;
	void step3() 
	{
		// stable method, do something
	}
};

class ConcretLibrary : public Library{
protected:
	void step1() 
	{
		// do something
	}
	void step2()
	{
		// do something
	}
};

void main()
{
	ConcretLibrary lb;
	lb.run();
}

类图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mfIEOksW-1721039195312)(https://i-blog.csdnimg.cn/direct/676bcc6d56fb41649c19b8751f47aad2.png)]
对比类图和C++实现,其中TemplateMethod就是模板方法,它是子类可以复用的算法结构。对于特定步骤step1、step2他们都是变化的,所以延迟到子类进行实现。

总结
  • 模板方法是一种非常实用且常见的设计模式,它使用简单的机制(虚函数)为应用程序框架提供了灵活的扩展点。
  • 模板方法中被模板方法调用的虚函数可以有具体实现,也可以没有任何实现(纯虚函数),但一般访问权限为protected,因为作为算法的一部分,它没有对外单独开放的必要。

相关推荐

  1. 模板方法原理C++实现

    2024-07-15 20:24:06       23 阅读
  2. 策略模式原理C++实现

    2024-07-15 20:24:06       22 阅读
  3. 装饰模式原理C++实现

    2024-07-15 20:24:06       25 阅读
  4. ● Queryable State实现原理配置方法

    2024-07-15 20:24:06       32 阅读
  5. c++字符串实现join方法,使用模板

    2024-07-15 20:24:06       24 阅读
  6. 工厂方法模式-C#实现

    2024-07-15 20:24:06       61 阅读
  7. 指令选择原理实现方式

    2024-07-15 20:24:06       33 阅读
  8. TCP/IP 原理实现方式优缺点

    2024-07-15 20:24:06       23 阅读
  9. 图像分类模型AlexNet原理实现

    2024-07-15 20:24:06       30 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-15 20:24:06       66 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-15 20:24:06       70 阅读
  3. 在Django里面运行非项目文件

    2024-07-15 20:24:06       57 阅读
  4. Python语言-面向对象

    2024-07-15 20:24:06       68 阅读

热门阅读

  1. kmeans.fit_predict 和 kmeans.fit有什么区别

    2024-07-15 20:24:06       20 阅读
  2. C++ --> 类和对象(三)

    2024-07-15 20:24:06       23 阅读
  3. 用Python爬虫能实现什么?得到什么?

    2024-07-15 20:24:06       21 阅读
  4. JVM堆内存的结构,YGC,FGC的原理

    2024-07-15 20:24:06       21 阅读
  5. Spring boot 2.0 升级到 3.3.1 的相关问题 (二)

    2024-07-15 20:24:06       21 阅读
  6. LeetCode题练习与总结:寻找峰值--162

    2024-07-15 20:24:06       17 阅读
  7. Mysql数据库(一)

    2024-07-15 20:24:06       25 阅读
  8. (leetcode学习)16. 最接近的三数之和

    2024-07-15 20:24:06       19 阅读