简单工厂模式

简单工厂模式


简单工厂模式是属于创建型模式,但不属于23种GOF设计模式之一。简单工厂模式,是由一个工厂对象决定创建出哪一种产品类的实例。

简单工厂模式种的各种角色:
工厂角色:简单工厂的核心,它负责创建所有实例的内部逻辑,工厂类的创建产品类的实例的方法可以被外界直接调用,创建所需的产品对象
抽象产品角色:简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口
具体产品角色:简单工厂模式所创建的具体实例对象
下面是一个例子:

#include <iostream>
using namespace std;

// 抽象产品角色:水果类
class AbstractFruit
{
public:
	virtual void ShowName() = 0;
};

// 具体产品角色:苹果类
class Apple :public AbstractFruit 
{
public:
	virtual void ShowName()
	{ 
		cout << "苹果" << endl; 
	}
};

// 具体产品角色:香蕉类
class Banana :public AbstractFruit
{ 
public:
	virtual void ShowName() 
	{ 
		cout << "香蕉" << endl;
	};
};

// 具体产品角色:梨类
class Pear :public AbstractFruit 
{ 
public:
	virtual void ShowName() 
	{ 
		cout << "梨" << endl;
	};
};

// 工厂角色:水果工厂,不符合开闭原则
class FruitFactory
{
public:
	// flag,接收参数,通过参数来判断应该创建什么类型的对象
	static AbstractFruit * CreateFruit(string flag)
	{
		if (flag == "apple") 
		{
			return new Apple(); // 创建苹果类对象
		}
		else if (flag == "banana") 
		{ 
			return new Banana();// 创建香蕉类对象
		}
		else if (flag == "pear") 
		{
			return new Pear();  // 创建梨类对象
		}
		else
		{ 
			return NULL;
		}
	}
};

void main()
{
	// 不需要 关心 创建过程,直接使用
	FruitFactory * factory = new FruitFactory;
	AbstractFruit * fruit = NULL;
	// 创建一个苹果类对象
	fruit = factory->CreateFruit("apple");  
	fruit->ShowName(); 
	delete fruit;
	// 创建一个香蕉类对象
	fruit = factory->CreateFruit("banana");
	fruit->ShowName();
	delete fruit;
	// 创建一个梨类对象
	fruit = factory->CreateFruit("pear");   
	fruit->ShowName(); 
	delete fruit;
	delete factory;
}

运行结果:
在这里插入图片描述

简单工厂模式的优缺点:

优点:
1、工厂类是整个模式的关键,根据外界给定的信息来决定到底要创建哪个具体类的对象。
2、外界创建对象时直接传参调用该方法就可以了,不需要关心对象具体是怎么创建的。
3、尤其是在某些对象创建过程比较复杂的情况下,比起直接创建具体产品对象,简单工厂模式更显优势。

缺点:
1、简单工厂模式不符合开闭原则,它增加新的功能是通过修改源代码实现的(比如在添加新的类时,就需要改变工厂类了)。
2、工厂类的职责过重,这个类一旦出现问题,会影响到很多使用这个工厂的模块。

感谢您的浏览。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值