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
- Template设计模式(C++)
- C++=》设计模式之模板模式(Template Method)
- 设计模式(c++)笔记之十三(Template模式)
- 23种设计模式 之 Template模式(模板模式)[C语言]
- C++设计模式(十)template模式
- 【设计模式】-模板方法模式(Template)
- 设计模式:模板方法模式(Template)
- Template模式详解--设计模式(13)
- 【设计模式】模板模式(Template Pattern)
- 设计模式 Template模式
- 设计模式 - Template模式
- 乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)
- 设计模式(二)template method
- 设计模式之Template
- 设计模式之Template
- 设计模式之Template
- 设计模式之Template
- 设计模式之Template
- 二叉树(续) 三种层次遍历算法
- Scribefire发CSDN博客
- 查看LogCat日志
- 走错了路,要记得回头 爱错了人,要懂得放手
- Decimal
- Template设计模式(C++)
- 第十周阅读程序(7):继承与派生
- MySQL索引详解
- linux命令大全(自己制作,基于鸟书私房菜以及man)-C
- hdu 2012 素数判定(java)
- (转)DirectX图象中设备支持的原基类型-D3D入门点列表
- 股市术语
- 第10周-阅读项目
- 《SED 单行脚本快速参考》的 awk 实现