设计模式——模板模式_Template Pattern

模板方法模式

Define the skeleton of an algorithm in an operation, deferring some steps to subclasses. Template Method lets subclasses redefine certain steps of an algorithm without changing the algorithm's structure.(定义一个操作中的算法的框架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。)


UML类图


C++代码实现

#include <iostream>
using namespace std;

class AbstractClass {
public:
	virtual void TemplateMethod() {
		DoSomething();
		DoAnything();
	}

protected:
	virtual void DoSomething() = 0;
	virtual void DoAnything() = 0;
};

class ConcreteClass_A : public AbstractClass {
protected:
	void DoSomething() { cout << "call ConcreteClass_A::DoSomething()" << endl; }
	void DoAnything()  { cout << "call ConcreteClass_A::DoAnything()" << endl;  }
};

class ConcreteClass_B : public AbstractClass {
protected:
	void DoSomething() { cout << "call ConcreteClass_B::DoSomething()" << endl; }
	void DoAnything()  { cout << "call ConcreteClass_B::DoAnything()" << endl;  }
};



#include "Template.h"


int main()
{
	AbstractClass* pTemple1 = new ConcreteClass_A();
	AbstractClass* pTemple2 = new ConcreteClass_B();

	pTemple1->TemplateMethod();
	pTemple2->TemplateMethod();

	delete pTemple1;
	delete pTemple2;

	return 0;
}

抽象是所有子类的共性封装。

如果相同的一段代码拷贝过2次,就需要对设计产生怀疑。

Template 是采用继承的方式实现算法的异构,其关键点就是将通用算法封装在抽象基类中,并将不同的算法细节放到子类中实现。 

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


    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值