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

一、原理讲解

模板方法的核心定义一个算法的骨架,而将一些细节方法延迟到之类中实现。其中,算法骨架是不变的部分,细节方法是变化的部分。设计模式的核心思想就是将变化部分和不变部分有效隔离、耦合出来。该思路的实现重要利用c++多态特性,运行时刻,基类指针指向不同的父类,则运行该父类重写的函数(前提:基类中是虚函数)。实现步骤如下:

1.1定义一个抽象基类ABC;

1.2抽象基类ABC定义两个抽象方法函数virture fun1()==0,virture fun2()==0,这两个方法函数是抽象的,不包括方法具体细节的实现;

1.3定一个算法骨架函数void run();然后在其中调度上述两个抽象方法(也就是调用这两个函数);

1.4现在抽象基类定义好了,写一个派生类Derive,继承该基类,然后具体的实现方法在派生类中实现,即virture fun1(){};virture fun2(){};

1.5最后,在main函数中,申明一个基类指针和new一个派生类对象,然后用基类指针指向派生类对象,即ABC *abc=new Derive()

1.6调用该指针的算法骨架函数,运行该算法骨架,即abc->run();,则运行时,程序执行算法骨架,然后自动调用父类方法。

注意:最核心的本质就是C++的多态基本用法!

二、示例代码如下

#include 

using namespace std;

class ABC
{
public:
	ABC() {}
	virtual ~ABC() {}

	void run() {
		fun1();
		fun2();
	}

protected:
	virtual void fun1() = 0;
	virtual void fun2() = 0;
	
private:

};

class Derive : public ABC
{
public:
	Derive() {}
	~Derive() {}

protected:
	virtual void fun1() {
		cout << "run derive fun1()" << endl;
	}

	virtual void fun2() {
		cout << "run derive fun2()" << endl;
	}

private:

};

int main()
{
	ABC *pAbc = new Derive();
	pAbc->run();
	delete pAbc;

	getchar();
	return 1;
}

C++设计模式——模板方法(template method)_第1张图片

三、总结

上述设计符合如下设计模式的八大原则

3.1开闭原则(OCP):即对扩展类(细节实现方法)开放,对算法框架(固定不变部分)封闭。

3.2针对接口编程,而不是针对实现编程

 

参考内容

https://www.cnblogs.com/lang5230/p/5320775.html(参考:重点参考)

https://www.cnblogs.com/bwar/archive/2018/06/17/9193369.html(参考:设计思路)

https://www.bilibili.com/video/av22292899?from=search&seid=8813426322713310552(参考:哔哩哔哩C++设计模式!!!)

你可能感兴趣的:(设计模式)