23中设计模式(13)--templete模式

本文详细介绍了模板模式的概念及其在面向对象设计中的应用。通过一个具体的C++代码实例,展示了如何使用模板模式来定义算法骨架,并让子类实现细节部分。此外,还强调了此模式与依赖倒置原则的关系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

面向对象的设计原则:高内聚、低耦合

软件重构原则:小步快跑------抽取的思想(抽取函数、抽取类、抽取接口);对扩展开放、对修改封闭

设计模式分类如下:

在面向对象系统的分析和设计过程中经常会遇到一种情况:对于某个逻辑实现(算法实现)在不同的对象中有不同的细节实现,但是框架是相同的。Templete模式是采用继承的方式来实现这一点,将框架放到基类中,定义好细节的接口,子类中实现具体的细节。类似于HOOK。说白了:父类TempleteMethod方法调用Primitive1和Primitive2,但是在子类中实现Primitive1和Primitive2。

Templete模式的结构图:

代码实现:

#include "iostream"
using namespace std;

class AbstractClass
{
public:
	virtual ~AbstractClass(){}
	void TempleteMethod();
protected:
	virtual void Operation1()=0;
	virtual void Operation2()=0;
	AbstractClass(){};
};
class ConcreteClass1:public AbstractClass
{
public:
	ConcreteClass1(){};
	~ConcreteClass1(){};
protected:
	void Operation1();
	void Operation2():
};
class ConcreteClass2:public AbstractClass
{
public:
	ConcreteClass2(){};
	~ConcreteClass2(){};
protected:
	void Operation1();
	void Operation2():
};

void AbstractClass::TempleteMethod()
{
	this->Operation1();
	this->Operation2();
}

void ConcreteClass1::Operation1()
{
	cout<<"ConcreteClass1 -- Operation1"<<endl;
}
void ConcreteClass1::Operation2()
{
	cout<<"ConcreteClass1 -- Operation2" << endl;
}
void ConcreteClass2::Operation1()
{
	cout<<"ConcreteClass2 -- Operation1"<<endl;
}
void ConcreteClass2::Operation2()
{
	cout<<"ConcreteClass2 -- Operation2"<<endl;
}
int main()
{
	AbstractClass * p1 = new ConcreteClass1();
	AbstractClass * p2 = new ConcreteClass2();
	
	p1->TempleteMethod();
	p2->TempleteMethod();
	
	return 0;
}

注意:将Operation操作定义为Protected,仅供TempleteMethod调用。

Template模式获得一种反向控制结构效果,这也是面向对象系统的分析和设计中一个原则DIP(依赖倒置:Dependency Inversion Principles)。其含义就是父类调用子类的操作(高层模块调用低层模块的操作),低层模块实现高层模块声明的接口。这样控制权在父类(高层模块),低层模块反而要依赖高层模块。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值