C++设计模式:简单工厂类模式<初探>
来源:互联网 发布:人工智能语音识别 编辑:程序博客网 时间:2024/06/13 03:13
背景:主要是解决,在不同的情况下需要创建不同类型对象,然后对该对象进行操作。比如:任务类型,我们可能就分了:A任务,B任务,C任务...自然而然,我们首先会去定义个基任务类型:CBaskTask,然后派生出,CChildTask1、CChildTask2、CChildTask3...在不同的场景下,我们可能要建立不同的类型任务,然后对其进行操作。我们总不能用switch-case来进行判断吧,那当派生出来的子任务类型多的时候,操作将非常的繁琐。所以针对这样的问题,我们采用了设计模式的一种:工厂模式的思想:就是我的厂子里,提前生产出需要用到的类型,那么客户想要什么类型的东西,直接到厂子里拿就可以了。
基类任务类型:
#pragma once#include "stdafx.h"class CBaseTask{public:virtual void Transfer() = 0;virtual void StopTransfer() = 0;};
子类任务类型:
#pragma once#include "BaseTask.h"class CChild1Task : public CBaseTask{public:void Transfer(){std::cout << "Do Child1 Task..." << std::endl;};void StopTransfer(){delete this;};static CBaseTask* TaskNew(){return new CChild1Task();};};class CChild2Task : public CBaseTask{public:void Transfer(){std::cout << "Do Child2 Task..." << std::endl;};void StopTransfer(){delete this;};static CBaseTask* TaskNew(){return new CChild2Task();};};工厂类:
#pragma once#include "ChildTask.h"//typedef CBaseTask* (*TaskNewFun)();typedef std::map<std::string, CBaseTask*> Factorymap;class CFactory{private:CFactory(){Register("Child1", CChild1Task::TaskNew());Register("Child2", CChild2Task::TaskNew());};CFactory& operator= (const CFactory&){return *this;};void Register(const std::string& v_szTaskName, CBaseTask* v_pfnTaskNew){m_Factorymap[v_szTaskName] = v_pfnTaskNew;};Factorymap m_Factorymap;public:~CFactory(){m_Factorymap.clear();};static CFactory* Get(){static CFactory instance;return &instance;};CBaseTask* TaskNew(const std::string& v_szTaskName){Factorymap::iterator it = m_Factorymap.find(v_szTaskName);if(it != m_Factorymap.end()){return it->second;}return NULL;};};
实例化应用:
// FactoryMode.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include "Factory.h"int _tmain(int argc, _TCHAR* argv[]){CBaseTask* pTask = CFactory::Get()->TaskNew("Child3");if(pTask){pTask->Transfer();}else{std::cout << "The Task doesn't exist in the factory..." << std::endl;}if(pTask){pTask->StopTransfer();}pTask = NULL;system("pause");return 0;}
阅读全文
0 0
- 设计模式初探—简单工厂模式
- C++设计模式:简单工厂类模式<初探>
- C#--简单工厂设计模式
- 设计模式 - 简单工厂模式(C++)
- C#--设计模式之简单工厂模式
- Java设计模式(一) 设计模式初探——简单工厂和工厂方法模式
- 设计模式之简单工厂,工厂方法模式(c++)
- 设计模式---简单类工厂
- 设计模式初探-抽象工厂模式
- 设计模式初探-工厂方法模式
- 设计模式初探之一------工厂模式
- 设计模式初探-工厂方法模式
- 设计模式初探-抽象工厂模式
- 设计模式初探之静态工厂模式
- 设计模式初探之工厂方法模式
- 简单工厂设计模式
- 设计模式-----简单工厂
- 简单工厂设计模式
- [NOIP2016] 天天爱跑步 LCA 树上差分 线段树
- Kotlin入门(13)类成员的众生相
- CUDA学习(2)--编程模型
- 第十五篇:JAVA集合框架之Set接口实现类
- 安卓开发打造闪光控件效果
- C++设计模式:简单工厂类模式<初探>
- codeforces 182E Wooden Fence(方案数DP)【模板】
- 1_,查空值和将空值转换为实际值,按模式搜索(匹配符%)
- 管道,有名管道以及通信,共享内存
- Linux 系统命令command not found,如ls、cd等
- 论测试人员为什么需要参加需求评审
- js常用方法
- 嵌入式Linux应用开发完全手册(三)中断
- ROS学习(1)--ROS简介