定义一个简单工厂类,它能够根据参数的不一样返回不一样类的实例,被建立的实例一般都具备共同的父类。ios
简单工厂模式有如下的结构:git
SimpleFactory.h函数
#ifndef SIMPLEFACTORY_H #define SIMPLEFACTORY_H #include <iostream> #include <string> //抽象产品类AbstractProduct(并不是真正意义上的抽象类,含有纯虚函数才是抽象类) class AbstractSportProduct { public: AbstractSportProduct(){} ~AbstractSportProduct(){} //虚函数 virtual void printName(){} virtual void play(){} }; //具体产品类Basketball class Basketball :public AbstractSportProduct { public: Basketball(){} ~Basketball(){} //具体实现方法 void printName(); void play(); }; //具体产品类Football class Football :public AbstractSportProduct { public: Football(){} ~Football(){} //具体实现方法 void printName(); void play(); }; //工厂类 class Factory { public: Factory(){} ~Factory(){} AbstractSportProduct *getSportProduct(std::string productName); }; #endif // TSIMPLEFACTORY_H
SimpleFactory.cppcode
#include "SimpleFactory.h" //Basketball方法 void Basketball::printName(){ printf("Basketball\n"); } void Basketball::play(){ printf("play Basketball\n"); } //Football方法 void Football::printName(){ printf("Football\n"); } void Football::play(){ printf("play Football\n"); } //工厂方法 AbstractSportProduct *Factory::getSportProduct(std::string productName) { AbstractSportProduct *pro = NULL; if (productName == "Basketball") { pro = new Basketball(); } else if (productName == "Football") { pro = new Football(); } return pro; }
main.cppblog
#include "SimpleFactory.h" int _tmain(int argc, _TCHAR* argv[]) { Factory *fac = new Factory(); AbstractSportProduct *product = NULL; product = fac->getSportProduct("Basketball"); product->printName(); product->play(); product = fac->getSportProduct("Football"); product->printName(); product->play(); return 0; }
输出结果:
字符串
优势:get
缺点:源码
gitee: https://gitee.com/CogenCG/DesignModestring