设计模式之简单工厂模式-我简单,我实用!
一、简单工厂模式的概念
简单工厂模式属于类的创建型模式 ,又叫做静态工厂方法模式。根据传入的参数类型不同,通过专门定义一个类来负责创建其他类的实例,被创建的实例有一个共同的父类。
简单工程模式不属于23中设计模式,但因为其使用简单,在软件设计中经常被使用。
二、简单工厂模式使用场景
1、工厂类负责创建的对象比较少,业务逻辑比较简单、变化不大。
2、客户端只需知道传入工厂类的参数,对于如何创建对象不用关心。
三、简单工厂模式构建方法
1、构建工厂类
工厂类是简单工厂模式的核心, 它负责实现创建所有实例的内部逻辑,该工厂类可以被外界直接调
用,创建所需的产品对象。
2、构建抽象产品类
简单工厂模式所创建的所有产品对象的父类,它负责描述所有实例所共有的公共接口。
3.构建具体产品类
简单工厂模式所创建的具体产品实例对象。
四、简单工厂模式的示例
// SimpleFactory.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include <iostream>
using namespace std;
// 水果基类
class Fruit
{
public:
Fruit() {};
~Fruit() {};
virtual void printName() = 0;
};
// 具体水果-香蕉
class Banana : public Fruit
{
public:
Banana() {};
~Banana() {};
void printName()
{
cout << "My name is Banana." << endl;
}
};
// 具体水果-苹果
class Apple : public Fruit
{
public:
Apple() {};
~Apple() {};
void printName()
{
cout << "My name is Apple." << endl;
}
};
// 工厂类
class Factory
{
public:
Factory() {};
~Factory() {};
enum FRUIT_TYPE
{
BANANA_TYPE,
APPLE_TYPE
};
Fruit *CreatFruit(FRUIT_TYPE type)
{
Fruit *pFruit = nullptr;
switch (type)
{
case FRUIT_TYPE::BANANA_TYPE:
pFruit = new Banana();
break;
case FRUIT_TYPE::APPLE_TYPE:
pFruit = new Apple();
break;
default:
break;
}
return pFruit;
}
};
#define DELETE_PTR(p) {if(p!=nullptr){delete (p); (p)=nullptr;}}
int main()
{
Factory *pFactory = nullptr;
Fruit *pFruit = nullptr;
pFactory = new Factory();
// 香蕉
pFruit = pFactory->CreatFruit(Factory::BANANA_TYPE);
pFruit->printName();
DELETE_PTR(pFruit);
// 苹果
pFruit = pFactory->CreatFruit(Factory::APPLE_TYPE);
pFruit->printName();
DELETE_PTR(pFruit);
DELETE_PTR(pFactory);
std::cout << "Hello World!\n";
getchar();
}
运行输出如下:
五、简单工厂模式的优缺点
优点:
1、工厂类包含了必要的逻辑判断,根据传入的参数类型来创建对应的产品,客户端仅负责“消费”产品即可,实现了对象创建和使用的分离。
2、客户端无需关心具体产品如何创建与组织,仅需知道具体产品所对应的参数即可。
缺点:
1、违反了高内聚责任分配原则,工厂类集中了所有产品的创建逻辑,职责过重,一旦无法正常工作,整个系统都将受到影响。
2、添加新产品就不得不修改工厂类,当产品类型较多时,有可能造成工厂逻辑过于复杂,不利于系统的扩展和维护。
能力有限,如有错误,多多指教。。。
本文为博主原创文章,未经博主允许请勿转载!作者:ISmileLi