设计模式--抽象工厂类

工厂模式:一个工厂只生产一种产品
抽象工厂模式:一个工厂生产一类产品
#include <iostream>

using namespace std;

//抽象产品类
class FruitObject
{
public:
	virtual void getFruit() = 0;
};
//抽象工厂类
class FactoryObject
{
public:
	virtual FruitObject *createApple() = 0;
	virtual FruitObject *createPear() = 0;
};
//具体产品类
class sourthApple : public FruitObject
{
public:
	void getFruit()
	{
		cout << "恭喜你得到了一个南方苹果" << endl;
	}
};
class northApple : public FruitObject
{
public:
	void getFruit()
	{
		cout << "恭喜你得到了一个北方苹果" << endl;
	}
};

class sourthPear : public FruitObject
{
public:
	void getFruit()
	{
		cout << "恭喜你得到了一个南方甜梨" << endl;
	}
};
class northPear : public FruitObject
{
public:
	void getFruit()
	{
		cout << "恭喜你得到了一个北方甜梨" << endl;
	}
};
//具体工厂类
class sourthFactory : public FactoryObject
{
public:
	FruitObject *createApple()
	{
		return new sourthApple;
	}
	FruitObject *createPear()
	{
		return new sourthPear;
	}
};
class northFactory : public FactoryObject
{
public:
	FruitObject *createApple()
	{
		return new northApple;
	}
	FruitObject *createPear()
	{
		return new northPear;
	}
};

int main()
{
	FactoryObject *faco = nullptr;
	FruitObject *fruo = nullptr;

	faco = new northFactory;
	fruo = faco->createApple();
	fruo->getFruit();
	delete fruo;
	fruo = faco->createPear();
	fruo->getFruit();
	delete fruo;
	delete faco;

	faco = new sourthFactory;
	fruo = faco->createApple();
	fruo->getFruit();
	delete fruo;
	fruo = faco->createPear();
	fruo->getFruit();
	delete fruo;
	delete faco;


	return 0;
}

个人理解:抽象工厂确实不太符合开闭原则,以上述案例说下,如果以后增加新的水果 香蕉 如果需要符合抽象工厂类,则么需要在抽象工厂类中增加 创建香蕉的 纯虚函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值