c++设计模式七,模板方法模式
来源:互联网 发布:mmd动作数据下载极乐 编辑:程序博客网 时间:2024/06/06 05:10
模板模式也是相当简单的一种模式,而且是比较常用的。模板模式是定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。TemplateMethod使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤
上代码:
hummermodel.h //基类
#ifndef HUMMERMODEL_H#define HUMMERMODEL_Hclass CHummerModel{public: CHummerModel(void); virtual ~CHummerModel(void); void Run();protected: virtual void Start() = 0; virtual void Stop() = 0; virtual void Alarm() = 0; virtual void EngineBoom() = 0; virtual bool IsAlarm();};#endif // HUMMERMODEL_Hhummermodel.cpp
#include "hummermodel.h"#include <iostream>using std::cout;using std::endl;CHummerModel::CHummerModel(void){}CHummerModel::~CHummerModel(void){}void CHummerModel::Run(){ //先发动汽车 Start(); //引擎开始轰鸣 EngineBoom(); //然后就开始跑了,跑的过程中遇到一条狗挡路,就按喇叭 if (IsAlarm()) Alarm(); //到达目的地就停车 Stop();}bool CHummerModel::IsAlarm(){ //钩子方法,默认喇叭是会响的 return true;}
hummerh1model.h
#ifndef HUMMERH1MODEL_H#define HUMMERH1MODEL_H#include "hummermodel.h"class CHummerH1Model : public CHummerModel{public: CHummerH1Model(void); ~CHummerH1Model(void); void SetAlarm(bool tag); void Start(); void Stop(); void Alarm(); void EngineBoom(); bool IsAlarm();private: bool m_isAlarm;};#endif // HUMMERH1MODEL_Hhummerh1model.cpp
#include "hummerh1model.h"#include <iostream>using std::cout;using std::endl;CHummerH1Model::CHummerH1Model(void){ m_isAlarm = true;}CHummerH1Model::~CHummerH1Model(void){}void CHummerH1Model::Start(){ cout << "悍马H1发动..." << endl;}void CHummerH1Model::Stop(){ cout << "悍马H1停车..." << endl;}void CHummerH1Model::Alarm(){ cout << "悍马H1鸣笛" << endl;}void CHummerH1Model::EngineBoom(){ cout << "悍马H1引擎声音是这样...." << endl;}bool CHummerH1Model::IsAlarm(){ return this->m_isAlarm;}void CHummerH1Model::SetAlarm( bool tag ){ this->m_isAlarm = tag;}hummerh2model.h
#ifndef HUMMERH2MODEL_H#define HUMMERH2MODEL_H#include "hummermodel.h"class CHummerH2Model : public CHummerModel{public: CHummerH2Model(void); ~CHummerH2Model(void); void Start(); void Stop(); void Alarm(); void EngineBoom(); bool IsAlarm();};#endif // HUMMERH2MODEL_Hhummerh2model.cpp
#include "hummerh2model.h"#include <iostream>using std::cout;using std::endl;CHummerH2Model::CHummerH2Model(void){}CHummerH2Model::~CHummerH2Model(void){}void CHummerH2Model::Start(){ cout << "悍马H2发动..." << endl;}void CHummerH2Model::Stop(){ cout << "悍马H2停车..." << endl;}void CHummerH2Model::Alarm(){ cout << "悍马H2鸣笛" << endl;}void CHummerH2Model::EngineBoom(){ cout << "悍马H2引擎声音是这样...." << endl;}bool CHummerH2Model::IsAlarm(){ return false;}main.cpp
#include "HummerModel.h"#include "HummerH1Model.h"#include "HummerH2Model.h"#include <crtdbg.h>int main(int argc, char* argv[]){ //客户开着H1型号,出去遛弯了 CHummerModel *ph1 = new CHummerH1Model(); ph1->Run(); delete ph1; //客户开H2型号,出去玩耍了 CHummerModel *ph2 = new CHummerH2Model(); ph2->Run(); delete ph2; //客户开着H1型号,出去遛弯了,并且不让喇叭响 CHummerH1Model *ph11 = new CHummerH1Model(); ph11->SetAlarm(false); ph11->Run(); delete ph11; _CrtSetDbgFlag(_CRTDBG_LEAK_CHECK_DF | _CRTDBG_ALLOC_MEM_DF); _CrtDumpMemoryLeaks(); return 0;}运行结果:
阅读全文
0 0
- 设计模式(七)模板方法模式
- Java设计模式《七》模板方法模式
- 设计模式(七):模板方法模式
- c++设计模式七,模板方法模式
- 设计模式_模板方法模式(C++)
- 设计模式(七)[模板方法(Template Method)模式]
- 设计模式之七、模板方法模式TemplateMethod
- 设计模式之python版(七)--模板方法模式
- 设计模式之(七)-----模板方法模式
- 设计模式之七:模板方法模式(Template Method)
- 设计模式笔记(七)--模板方法模式
- 七、模板方法模式——设计模式学习笔记
- 设计模式(七)——模板方法模式
- Java设计模式(七) 模板模式
- 设计模式—模板模式(七)
- (七)模板方法模式
- 七、浅谈模板方法模式
- 设计模式随笔(七):模板方法(Template Method)
- 位运算符
- dcm4che3在Windows与Linux环境下压缩dicom文件
- springmvc整合redis
- 二叉树
- 欢迎使用CSDN-markdown编辑器
- c++设计模式七,模板方法模式
- 阿里云何万青:搭建首个全球云上超算中心,做超算能力的普惠者
- 解决多次点击出现蓝色背景
- 关于ViewPager高度自适应(随着页面高度改变Viewpager的高度)
- 微服务架构的分布式事务解决方案
- css控制页面文字不能被选中user-select:none;
- bootstrap问题1(为什么不能把一串字母换行)
- 如何用adb连接android手机
- Chrome是如何实现TLS协议的