2. 工厂方法 – 创建产品,子类定制
简介
工厂模式是我们最常用的实例化对象模式了,是用工厂方法代替new操作的一种模式。著名的Jive论坛 ,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见。因为工厂模式就相当于创建实例对象的new,我们经常要根据类Class生成实例对象,如A a=new A() 工厂模式也是用来创建实例对象的,所以以后new时就要多个心眼,是否可以考虑使用工厂模式,虽然这样做,可能多做一些工作,但会给你系统带来更大的可扩展性和尽量少的修改量。工厂模式_百度百科 (baidu.com)
使用场景和设计思路
常用在产品类有很多的时候,由工厂来决定创建哪一类;
实现
// 工厂模式
// 时间:2023-10-27
// 作者:@conceal
#include <iostream>
#include <string>
using namespace std;
// 创建一个制造笔的接口
class Pen
{
public:
virtual void manufacture() = 0;
};
// 创建一个制造铅笔的类
class Pencil : public Pen
{
public:
void manufacture()
{
cout << "制造铅笔" << endl;
}
};
// 创建一个制造圆珠笔的类
class BallPen : public Pen
{
public:
void manufacture()
{
cout << "制造圆珠笔" << endl;
}
};
// 创建一个制造钢笔的类
class FountainPen : public Pen
{
public:
void manufacture()
{
cout << "制造钢笔" << endl;
}
};
// 创建一个制造笔的工厂
class PenFactory
{
public:
Pen *createPen(string penType)
{
if (penType == "Pencil")
{
return new Pencil();
}
else if (penType == "BallPen")
{
return new BallPen();
}
else if (penType == "FountainPen")
{
return new FountainPen();
}
else
{
return NULL;
}
}
};
int main()
{
PenFactory *penFactory = new PenFactory();
Pen *pencil = penFactory->createPen("Pencil");
pencil->manufacture();
Pen *ballPen = penFactory->createPen("BallPen");
ballPen->manufacture();
Pen *fountainPen = penFactory->createPen("FountainPen");
fountainPen->manufacture();
return 0;
}