1简单工厂
简单工厂使用一个工厂类,通过类型代码管理不同的产品的生产过程
#include <QCoreApplication>
#include <QList>
#include <QDebug>
///NOTE:4简单工厂模式的例子--20190212
///简单工厂的作用是使用一个工厂类统一管理某产品的生产过程(即某类的实例化过程)
/// 使得通过修改配置改变生产的产品变得简单
//家具类接口
class Furniture
{
public:
virtual ~Furniture() {}
virtual void Operation() = 0;
};
//床
class BedFurniture: public Furniture
{
public:
void Operation()
{
qDebug() << "Bed Operation";
}
};
//椅子
class ChairFurniture: public Furniture
{
public:
void Operation()
{
qDebug() << "Chair Operation";
}
};
//工厂接口
class Factory
{
public:
virtual ~Factory() {}
virtual Furniture* CreateProduct(int nType) = 0;
};
//家具工厂
class FurnitureFactory: public Factory
{
public:
Furniture* CreateProduct(int nType)
{
switch (nType)
{
case 0:
return new BedFurniture();
break;
case 1:
return new ChairFurniture();
break;
default:
return nullptr;
break;
}
}
};
int main(int, char **)
{
///简单工厂模式测试
Factory *factory = new FurnitureFactory();
Furniture *bed = factory->CreateProduct(0);
Furniture *chair = factory->CreateProduct(1);
bed->Operation();
chair->Operation();
delete bed;
delete chair;
delete factory;
getchar();
}
结果
2一般工厂模式
一般工厂为每个产品的生产创建一个工厂子类进行生产,换言之,现在工厂的分工更细了,不需要一个工厂通过区分订单类型来决定生产的是什么家具了
#include <QCoreApplication>
#include <QList>
#include <QDebug>
///NOTE:5工厂模式的例子--20190212
//家具类接口
class Furniture
{
public:
virtual ~Furniture() {}
virtual void Operation() = 0;
};
//床
class BedFurniture: public Furniture
{
public:
void Operation()
{
qDebug() << "Bed Operation";
}
};
//椅子
class ChairFurniture: public Furniture
{
public:
void Operation()
{
qDebug() << "Chair Operation";
}
};
//工厂接口
class Factory
{
public:
virtual ~Factory() {}
virtual Furniture*CreateProduct() = 0;
};
//床工厂
class BedFactory: public Factory
{
public :
BedFurniture *CreateProduct()
{
return new BedFurniture();
}
};
//椅子工厂
class ChairFactory: public Factory
{
public :
ChairFurniture *CreateProduct()
{
return new ChairFurniture();
}
};
int main(int, char **)
{
///工厂模式测试
Factory *factory = nullptr;
factory = new BedFactory();
Furniture *bed = factory->CreateProduct();
factory = new ChairFactory();
Furniture *chair = factory->CreateProduct();
bed->Operation();
chair->Operation();
delete bed;
delete chair;
delete factory;
getchar();
}
结果同上
3抽象工厂模式
抽象工厂模式把工厂也进行了抽象,工厂接口中含有每个产品的生产过程接口,因此每个工厂子类都有生产所有产品的能力,根据不同需求进行生产。
///NOTE:6抽象工厂模式的例子--20190212
//家具类接口
class Furniture
{
public:
virtual ~Furniture() {}
virtual void Operation() = 0;
};
//床
class BedFurniture: public Furniture
{
public:
void Operation()
{
qDebug() << "Bed Operation";
}
};
//椅子
class ChairFurniture: public Furniture
{
public:
void Operation()
{
qDebug() << "Chair Operation";
}
};
//工厂接口
class Factory
{
public:
virtual ~Factory() {}
virtual Furniture *CreateBed() = 0;
virtual Furniture *CreateChair() = 0;
};
//杰克牌家具厂
class JackFactory: public Factory
{
public:
JackFactory()
{
qDebug() << "These furnitures are Jack's";
}
Furniture *CreateBed()
{
return new BedFurniture();
}
Furniture *CreateChair()
{
return new ChairFurniture();
}
};
// 罗斯牌家具厂
class RoseFactory: public Factory
{
public:
RoseFactory()
{
qDebug() << "These furnitures are Rose's";
}
Furniture *CreateBed()
{
return new BedFurniture();
}
Furniture *CreateChair()
{
return new ChairFurniture();
}
};
int main(int, char **)
{
///抽象工厂模式测试
Factory *factory = nullptr;
factory = new JackFactory();
Furniture *jackbed = factory->CreateBed();
Furniture *jackchair = factory->CreateChair();
jackbed->Operation();
jackchair->Operation();
factory = new RoseFactory();
Furniture *rosebed = factory->CreateBed();
Furniture *rosechair = factory->CreateChair();
rosebed->Operation();
rosechair->Operation();
delete jackbed;
delete jackchair;
delete rosebed;
delete rosebed;
delete factory;
getchar();
}
结果
4简单记忆三种工厂模式
简单工厂:一个家具厂生产所有家具,根据订单(类型)区分
工厂模式:不同的家具由不同的家具厂生产
抽象工厂:所有的工厂都能生产所有家具,根据品牌(需求)区分
分析思路部分来自 https://www.cnblogs.com/cxjchen/p/3143633.html 感谢!