带你深入浅出设计模式:五、简单工厂模式:构建软件的高效生产“流水线”
此为设计模式第五谈!
用总-分-总的结构和生活化的例子给你讲解设计模式!
码农不易,各位学者学到东西请点赞收藏支持支持!
开始部分:
总:简单工厂模式就是通过一个工厂类创建对象,减少了客户端的代码的复杂性和耦合性。(耦合性:就是类似于关系紧密度)
分:
1.老规则,在vs中创建一个控制台应用程序
2.实现编码,这里用一个汽车制作工厂来作为辅助例子
2.1 实现抽象汽车基类
2.2 实现汽车产品类,继承抽象汽车基类
2.3 实现工厂类,用来生产汽车产品
2.4 当客户需要什么产品,跟工厂说,就生成具体产品,而不用客户了解汽车是如何构造的(降低耦合性)
#include <iostream>
using namespace std;// 抽象汽车
class AbstractCar
{
public:virtual void ShowCarName() = 0;//纯虚函数
};// 具体产品的汽车继承
// 凯美瑞
class Camry :public AbstractCar
{virtual void ShowCarName(){cout << "Camry Car." << endl;}
};// 迈腾
class Magotan :public AbstractCar
{virtual void ShowCarName(){cout << "Magotan Car." << endl;}
};// 奥迪
class Audi :public AbstractCar
{virtual void ShowCarName(){cout << "Audi Car." << endl;}
};// 奔驰
class Benz :public AbstractCar
{virtual void ShowCarName(){cout << "Benz Car." << endl;}
};// 通过传递参数来确定需要生成那汽车
// 汽车工厂
class CarFactory
{
public:static AbstractCar* CreateCarFunc(string cname){if (cname == "Camry")// 具体生产细节......return new Camry;else if (cname == "Magotan")// 具体生产细节......return new Magotan;else if (cname == "Audi")// 具体生产细节......return new Audi;else if (cname == "Benz")// 具体生产细节......return new Benz;elsereturn nullptr; }
};int main()
{// 创建工厂CarFactory* fty = new CarFactory;// 创建汽车AbstractCar* car;// 指定工厂需要创建的汽车car = fty->CreateCarFunc("Benz");car->ShowCarName();delete car;car = fty->CreateCarFunc("Camry");car->ShowCarName();delete car;car = fty->CreateCarFunc("Audi");car->ShowCarName();delete car;car = fty->CreateCarFunc("Magotan");car->ShowCarName();delete car;return 0;
}
3.以下为简单工厂模式的结构图和三大模块,来辅助理解,主要为工厂、抽象产品基类、实际产品