设计模式3-抽象工厂模式-C++

推荐文章:https://design-patterns.readthedocs.io/zh_CN/latest/index.html

 抽象工厂模式只是比工厂方法模式多了更加丰富的产品。

class Product
{
public:
	virtual void showProduct() = 0;
protected:
	Product() {}
};

// 牛奶口味的糖果
class MilkSugar:public Product
{
public:
	MilkSugar() :Product() {}
	void showProduct() override
	{
		cout << "MilkSugar" << endl;
	}
};
// 花生口味的糖果
class PeanutSugar :public Product
{
public:
	PeanutSugar() :Product() {}
	void showProduct() override
	{
		cout << "PeanutSugar" << endl;
	}
};
// 牛奶口味的曲奇饼
class MilkCookie :public Product
{
public:
	MilkCookie() :Product() {}
	void showProduct() override
	{
		cout << "MilkCookie" << endl;
	}
};
// 花生口味的曲奇饼
class PeanutCookie :public Product
{
public:
	PeanutCookie() :Product() {}
	void showProduct() override
	{
		cout << "PeanutCookie" << endl;
	}
};

// 既可以创建糖果又可以创建曲奇饼
class Factory
{
public:
	virtual Product* createSugar() = 0;
	virtual Product* createCookie() = 0;

protected:
	Factory() {}
};
// 生产牛奶口味的糖果和曲奇饼
class MilkTasteFactory :public Factory
{
public:
	MilkTasteFactory() :Factory(), m_sugar(NULL),m_cookie(NULL) {}
	~MilkTasteFactory() { delete m_sugar; m_sugar = NULL; delete m_cookie; m_cookie = NULL; }
	Product* createSugar() override
	{
		m_sugar = new MilkSugar();
		return m_sugar;
	}

	Product* createCookie() override
	{
		m_cookie = new MilkCookie();
		return m_cookie;
	}
private:
	Product* m_sugar;
	Product* m_cookie;
};
// 生产花生口味的糖果和曲奇饼
class PeanutTasteFactory :public Factory
{
public:
	PeanutTasteFactory() :Factory(), m_sugar(NULL), m_cookie(NULL) {}
	~PeanutTasteFactory() { delete m_sugar; m_sugar = NULL; delete m_cookie; m_cookie = NULL; }
	Product* createSugar() override
	{
		m_sugar = new MilkSugar();
		return m_sugar;
	}

	Product* createCookie() override
	{
		m_cookie = new MilkCookie();
		return m_cookie;
	}
private:
	Product* m_sugar;
	Product* m_cookie;
};
int main()
{
    // 工厂对象
	Factory* milkFactory = new MilkTasteFactory();
	Product* cookie = milkFactory->createCookie();
	Product* sugar = milkFactory->createSugar();
	cookie->showProduct(); // MilkCookie
	sugar->showProduct(); // MilkSugar

	Factory* peanutFactory = new PeanutTasteFactory();
	cookie = peanutFactory->createCookie();
	sugar = peanutFactory->createSugar();
	cookie->showProduct(); // PeanutCookie
	sugar->showProduct(); // PeanutSugar
}

猜你喜欢

转载自blog.csdn.net/u010196624/article/details/88577186
今日推荐