C++设计模式---简单工厂模式

简单工厂模式

主要用于创建对象,新添加类时,不会影响以前的系统代码。核心思想是用一个工厂来根据输入的条件产生不同的类,根据不同类的virtual函数得到不同的结果。适用于不同情况创建不同的类时,客户端必须知道基类和工厂类,耦合性不好。

#include <iostream>
using namespace std;
 enum CTYPE { PA=1, PB };

 //基类
class Product
{
public:
	Product() {}
	virtual ~Product() {}
public:
	virtual void operation() = 0;
};
//产品A
class ProductA :public Product
{
public:
	ProductA() {}
	virtual ~ProductA() {}
public:
	void operation() { cout << "ProductA" << endl; }
};
//产品B
class ProductB :public Product
{
public:
	ProductB() {}
	virtual ~ProductB() {}
public:
	void operation() { cout << "ProductB" << endl; }
};
//工厂
class Factory
{
public:
	static Product * CreatProduct(CTYPE ctype)
	{
		if (ctype == PA) //工厂内部判断    
			return new ProductA(); //生产产品A    
		else if (ctype == PB)
			return new ProductB(); //生产产品B    
		else
			return NULL;
	}
};

int main()
{
	
	Product * pf = Factory::CreatProduct(PA);//要这样写,就需要在声明处+ static
	pf->operation();

	Product * pf = Factory::CreatProduct(PB);
	pf->operation();
	return 0;
}

这样设计的缺点,就是要增加新的核类型时,就需要修改工厂类。这就违反了开放封闭原则:软件实体(类、模块、函数)可以扩展,但是不可修改。

简单工厂模式图:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值