c++设计模式之抽象工厂模式

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/m0_38126105/article/details/84502841

抽象工厂模式是提供一个接口,用来创建一系列对象的接口。

#include <iostream>
#include <string>
#include <memory>
using namespace std;


/*	抽象工厂模式
*	抽象工厂模式,提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类。
*/
class IApple
{
public:
	IApple() {}
	virtual void ShowName() = 0;
};

class ChineseApple : public IApple
{
public:
	ChineseApple() {}
	virtual void ShowName() { cout << "中国苹果" << endl; }
};

class AmericanApple : public IApple
{
public:
	AmericanApple() {}
	virtual void ShowName() { cout << "美国苹果" << endl; }
};
class JapaneseApple : public IApple
{
public:
	JapaneseApple() {}
	virtual void ShowName() { cout << "日本苹果" << endl; }
};

class IPear
{
public:
	IPear() {}
	virtual void ShowName() = 0;
};

class ChinesePear : public IPear
{
public:
	ChinesePear() {}
	virtual void ShowName() { cout << "中国鸭梨" << endl; }
};

class AmericanPear : public IPear
{
public:
	AmericanPear() {}
	virtual void ShowName() { cout << "美国鸭梨" << endl; }
};

class JapanesePear : public IPear
{
public:
	JapanesePear() {}
	virtual void ShowName() { cout << "日本鸭梨" << endl; }
};

using ApplePtr = std::shared_ptr<IApple>;
using PearPtr = std::shared_ptr<IPear>;
class IFactory
{
public:
	IFactory() {}
	virtual ~IFactory() {}
	virtual ApplePtr CreateApple() = 0;
	virtual PearPtr CreatePear() = 0;
};

class  ChineseFactory : public IFactory
{
public:
	ChineseFactory() {}
	virtual ApplePtr CreateApple()
	{
		return std::make_shared<ChineseApple>();
	}
	virtual PearPtr CreatePear()
	{
		return std::make_shared<ChinesePear>();
	}
};
class AmericanFactory : public IFactory
{
public:
	virtual ApplePtr CreateApple()
	{
		return std::make_shared<AmericanApple>();
	}
	virtual PearPtr CreatePear()
	{
		return std::make_shared<AmericanPear>();
	}
};
class JapaneseFactory :public IFactory
{
public:
	virtual ApplePtr CreateApple()
	{
		return std::make_shared<JapaneseApple>();
	}
	virtual PearPtr CreatePear()
	{
		return std::make_shared<JapanesePear>();
	}
};
int main()
{
	std::unique_ptr<IFactory> factoryPtr = std::make_unique<ChineseFactory>();
	ApplePtr pApple = factoryPtr->CreateApple();
	pApple->ShowName();
	PearPtr pPear = factoryPtr->CreatePear();
	pPear->ShowName();
}

猜你喜欢

转载自blog.csdn.net/m0_38126105/article/details/84502841