首先讲需要创建的各种不同对象的相关代码封装到不同的类中,这些类称为具体产品类,而将它们公共的代码进行抽象和提取后封装在一个抽象产品类中,每一个具体产品类是抽象产品类的子类;然后提供一个工厂类用于创建各种产品,在工厂类中提供一个创建产品的工厂方法,该方法可以很据所传入的参数不同创建不同的具体产品对象;客户端只需要调用工厂类的工厂方法并传入相应的参数即可以得到一个产品对象。
#include <string>
using namespace std;
//抽象图表接口:抽象产品类
class Chart{
public:
virtual void display()=0;
};
//柱状图表:具体产品类
class HistogramChart :public Chart{
public:
HistogramChart(){
cout<<"创建柱状图"<<endl;
}
void display(){
cout<<"显示柱状图"<<endl;
}
};
//饼状图表:具体产品类
class PipeChart:public Chart{
public:
PipeChart(){
cout<<"创建饼状图"<<endl;
}
void display(){
cout<<"显示饼状图"<<endl;
}
};
//折线图类:具体产品类
class LineChart:public Chart{
public:
LineChart(){
cout<<"创建折线图"<<endl;
}
void display(){
cout<<"显示折线图"<<endl;
}
};
//图表工厂类:工厂类
class ChartFactory{
public:
static Chart* getChart(string arg){
Chart *chart=NULL;
int i=0;
while(arg[i]){
arg[i]=tolower(arg[i]);
i++;
}
if(arg=="histogramchart"){
cout<<"初始化设置柱状图"<<endl;
chart=new HistogramChart();
}
else if(arg=="pipechart"){
chart=new PipeChart();
cout<<"初始化设置饼状图"<<endl;
}
else if(arg=="linechart"){
chart=new LineChart();
cout<<"初始化设置折线图"<<endl;
}
return chart;
}
};
int main(){
Chart* chart=NULL;
chart=ChartFactory::getChart("PipeChart");
if(chart==NULL)
cout<<"参数不正确"<<endl;
else
chart->display();
return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文:http://blog.csdn.net/sxhlovehmm/article/details/46862783