设计模式:1.1 简单工厂模式

来源:互联网 发布:ubuntu ibus pinyin 编辑:程序博客网 时间:2024/04/27 06:32

简单工厂模式:在工厂类中做判断,从而创造相应的产品。增加新的产品时,就需要修改工厂类。

 

实例:一家生成处理器的厂家,一个工厂,能够产生两种型号的处理器核。客户需要什么样的处理器核,显示告诉生产工厂。

 

简单工厂缺点:增加新的产品类型,需要修改工厂类

 

 

 

main.cpp内容如下

#include <iostream>#include <stdlib.h>#include "SingleCore.h"#include "Factory.h"#include <memory>using namespace std;void process(){Factory factory;std::shared_ptr<SingleCore> ptrCore = factory.instance(COREA);if(ptrCore){ptrCore->show();}}int main(int argc,char* argv[]){process();system("pause");return 0;}


Factory.h内容如下

#ifndef FACTORY_H#define FACTORY_H#include <memory>#include "SingleCore.h"class Factory{public:Factory(void);~Factory(void);std::shared_ptr<SingleCore> instance(enum PRODUCT_TYPE type);};#endif


 

Factory.cpp内容如下

#include "Factory.h"#include "SingleCoreA.h"#include "SingleCoreB.h"Factory::Factory(void){}Factory::~Factory(void){}//简单工厂模式缺点:增加新类型需要修改工厂类std::shared_ptr<SingleCore> Factory::instance(enum PRODUCT_TYPE type){//工厂内部判断if(type == COREA){std::shared_ptr<SingleCore> ptrA(new SingleCoreA);return ptrA;}else if(type == COREB){std::shared_ptr<SingleCore> ptrB(new SingleCoreB);return ptrB;}else{return NULL;}}


Sincore.h内容

#ifndef SINGLECORE_H#define SINGLECORE_Henum PRODUCT_TYPE{COREA,COREB};//父类class SingleCore{public:SingleCore(void);virtual ~SingleCore(void);virtual void show()=0;};#endif


Sincore.cpp内容

#include "SingleCore.h"SingleCore::SingleCore(void){}SingleCore::~SingleCore(void){}/*void SingleCore::show(){}*/


SingleCoreA.h

#ifndef SINGLECOREA_H#define SINGLECOREA_H#include "singlecore.h"class SingleCoreA :public SingleCore{public:SingleCoreA(void);~SingleCoreA(void);void show();};#endif


SingleCoreA.cpp

#include "SingleCoreA.h"#include <iostream>using namespace std;SingleCoreA::SingleCoreA(void){}SingleCoreA::~SingleCoreA(void){}void SingleCoreA::show(){cout << "单核处理器A" << endl;}


SingleCoreB.h

#ifndef SINGLECOREB_H#define SINGLECOREB_H#include "singlecore.h"class SingleCoreB :public SingleCore{public:SingleCoreB(void);~SingleCoreB(void);void show();};#endif


SingleCoreB.cpp

 

#include "SingleCoreB.h"#include <iostream>using namespace std;SingleCoreB::SingleCoreB(void){}SingleCoreB::~SingleCoreB(void){}void SingleCoreB::show(){cout << "单核处理器B" << endl;}


 

 

0 0
原创粉丝点击