Template设计模式(C++)

来源:互联网 发布:sqlserver guid 编辑:程序博客网 时间:2024/04/28 02:05

摘录《设计模式精解-GoF 23 种设计模式解析》的讲解:

问题:
        在面向对象系统的分析与设计过程中经常会遇到这样一种情况:对于某一个业务逻辑(算法实现)在不同的对象中有不同的细节实现,但是逻辑(算法)的框架(或通用的应用算法)是相同的。Template提供了这种情况的一个实现框架。
        Template模式是采用继承的方式实现这一点:将逻辑(算法)框架放在抽象基类中,并定义好细节的接口,子类中实现细节。【注释1】
【注释1】:Strategy模式解决的是和Template模式类似的问题,但是Strategy模式是将逻辑(算法)封装到一个类中,并采取组合(委托)的方式解决这个问题。

模式选择:


          Template模式实际上就是利用面向对象中多态的概念实现算法实现细节和高层接口的松耦合。可以看到Template模式采取的是继承方式实现这一点的,由于继承是一种强约束性的条件,因此也给Template模式带来一些许多不方便的地方(有关这一点将在讨论中展开)。

实现:




我的理解:

         Template设计模式本身就是一种子类继承父类的具体实现关系。在使用时,抽象类的可以通过声明指针实现不同子类的同一函数功能的不同是实现方法。

      Template设计模式将通用方法(即成员函数)封装在抽象基类,就像是在顶层设计一个只有框架没有内容的大概方法,将不同的实现细节交由子类来实现。在调用实际的通用方法时,由于子类的继承动态绑定关系,可以将子类指针赋与抽象基类。

我的实现代码:

//template.h#pragma once//声明基类Robotclass Robot{public:~Robot(void);void RobotStart();protected:Robot(void);virtual void RobotPowerOn()=0;virtual void RobotInitialize()=0;};//声明子类 KukaRobotclass KukaRobot:public Robot{public:KukaRobot();~KukaRobot();protected:void RobotPowerOn();void RobotInitialize();};//声明子类 AbbRobotclass AbbRobot:public Robot{public:AbbRobot();~AbbRobot();protected:void RobotPowerOn();void RobotInitialize();};

//template.cpp#include "Template.h"#include <iostream>//Robot基类的实现Robot::Robot(void){}Robot::~Robot(void){}void Robot::RobotStart(){   this->RobotPowerOn();   this->RobotInitialize();}//KukaRobot子类的实现KukaRobot::KukaRobot(){}KukaRobot::~KukaRobot(){}void KukaRobot::RobotPowerOn(){std::cout<<"kuka robot power on!"<<std::endl;}void KukaRobot::RobotInitialize(){std::cout<<"kuka robot initialize!"<<std::endl;}//AbbRobot子类的实现AbbRobot::AbbRobot(){}AbbRobot::~AbbRobot(){}void AbbRobot::RobotPowerOn(){std::cout<<"abb robot power on!"<<std::endl;}void AbbRobot::RobotInitialize(){std::cout<<"abb robot initialize!"<<std::endl;}

// TemplatePattern.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include "Template.h"int _tmain(int argc, _TCHAR* argv[]){  Robot *p1=new KukaRobot();  Robot *p2=new AbbRobot();  p1->RobotStart();  p2->RobotStart();}

输出结果:


0 0
原创粉丝点击