图片引用于百度图片
简介:简单工厂模式提供了专门的工厂类用于创建对象,将对象的创建和对象的使用分离开,不需要关心对象怎么创建的,只需要知道要用的对象名或者枚举名即可。
优点:调用者想创建一个对象,只需要知其名
缺点:违背开闭原则,一旦添加新产品,就必须修改工厂类,并且工厂类集中了所有产品的创建,一旦出错整个项目都会受影响
例子背景:现在客户需要i3和i5电脑主机,而两种主机各方面属性并不相同,所以现在工厂有2个系列的产品,i3和i5的主机
概念:当抽象产品不止一个的时候,工厂怎么知道要创建哪一个产品呢。工厂用一个静态方法。根据参数分别创建i3和i5的产品对象,需要什么给什么,工厂可创建拥有共同特性的所有产品对象。
工厂模式代码:
- 抽象产品类
#pragma once
class IProduct
{
public:
virtual ~IProduct() {}
virtual void PrintProductName() = 0;
};
- 具体产品类
#pragma once
#include "IProduct.h"
#include <stdio.h>
class i3Mainframe : public IProduct
{
public:
virtual void PrintProductName()
{
printf("我是i3主机\n");
}
};
class i5Mainframe : public IProduct
{
public:
virtual void PrintProductName()
{
printf("我是i5主机\n");
}
};
- 工厂类
#pragma once
#include "Mainframe.h"
#include <string>
class MainframeFactory
{
public:
static IProduct* CreateProduct(const std::string& pdt)
{
if (pdt == "i3")
{
return (new i3Mainframe);
}
else if (pdt == "i5")
{
return (new i5Mainframe);
}
return nullptr;
}
};
- 调用者
#include "MainframeFactory.h"
int main()
{
IProduct* c = MainframeFactory::CreateProduct("i3");
IProduct* d = MainframeFactory::CreateProduct("i5");
c->PrintProductName();
d->PrintProductName();
delete c;
delete d;
getchar();
return 0;
}
总结:
简单工厂模式(Simple Factory Pattern):定义一个工厂类,因为被创建的实例都有共同的基类,所以用于创建实例的静态方法可以根据参数的不同返回不同类的实例。
作者:丶梦爱
博客:https://blog.youkuaiyun.com/u014732297(转载请说明出处)