此为设计模式第五谈!
用总-分-总的结构和生活化的例子给你讲解设计模式!
码农不易,各位学者学到东西请点赞收藏支持支持!
开始部分:
总:简单工厂模式就是通过一个工厂类创建对象,减少了客户端的代码的复杂性和耦合性。(耦合性:就是类似于关系紧密度)
分:
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;
else
return 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.以下为简单工厂模式的结构图和三大模块,来辅助理解,主要为工厂、抽象产品基类、实际产品