浅学一下【设计模式】
第一个练习:简单工厂模式
简单工厂模式
定义一个工厂类,它可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类。因为在简单工厂模式中用于创建实例的方法是静态(static)方法,因此简单工厂模式又被称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式。
翻译一下,就是简单工厂模式就是你要的是A,你就传入一个“指示”参数,然后我就给你创建一个你要的A对象,当然你不需要关心我如何创建。
在这样的设计模式之中,存在这样的几个类:
- Product(抽象产品):这是所有你需要的类型的对象的共同的祖先,它封装了各种对象的公有方法,然后在工厂类中就可以通过定义的通用的方法来操作获得具体产品对象(因为所有的具体产品类都派生于它)。
- ConcreateProduct(具体产品):用于创建一个具体的产品对象,这些具体产品类都继承于抽象产品类,在该类中需要实现抽闲产品类中声明的抽象方法。
- Factory(工厂):此类声明了工厂方法,用于返回一个产品,所有创建对象的工厂类都必须实现该接口。
举个栗子:
#include <iostream>
using namespace std;
#include<string>
//抽象产品类
struct Chart {
virtual void display() = 0;
};
//柱状图类
class HistogramChart :public Chart
{
public:
HistogramChart()
{
cout << "创建柱状图!" << endl;
}
void display()
{
cout << "显示柱状图" << endl;
}
};
//饼状图类
class PieChart :public Chart
{
public:
PieChart()
{
cout << "创建饼状图!" << endl;
}
void display()
{
cout << "显示饼状图" << endl;
}
};
//折线图类
class LineChart :public Chart
{
public:
LineChart()
{
cout << "创建折线图!" << endl;
}
void display()
{
cout << "显示折线图" << endl;
}
};
class ChartFactory
{
public:
static Chart* getChart(const string& type)
{
Chart* chart = nullptr;
if (type == "histogram")
{
chart = new HistogramChart();
cout << "初始化设置柱状图!" << endl;
}
else if (type == "pie")
{
chart = new PieChart();
cout << "初始化设置饼图!" << endl;
}
else if (type == "line")
{
chart = new LineChart();
cout << "初始化设置折线图!" << endl;
}
return chart;
}
};
当客户需要那个具体产品时,传入相应类型“指示”参数即可,例如:
int main()
{
Chart* chart = nullptr;
chart = ChartFactory::getChart("pie");
chart->display();
delete chart;
return 0;
}