工厂方法模式c++实现

工厂方法模式是对简单工厂的改进 在简单工厂模式中没有满足设计原则中的开闭原则 即如果你要增加新类的话 你必须要修改工厂类 这违背了开闭原则 对修改关闭 对扩展开放 而工厂方法模式只需要增加新类即可

但是如果你类不多我觉得还是使用简单工厂吧

优点:符合开闭原则 增加了可扩展性

缺点:工厂继承层次和产品继承层次要相同 当产品过多继承层次过深时 要写很多工厂类

uml类图实现

代码实现如下

#include<iostream>
//假设人有三种 女人 男人 人妖 然后他们有一个共同基类就是human 那么我们可以做如下抽象
#include<memory>
class human
{
public:
	human() {};
	virtual ~human() {};
private:
	int age{};
	int height{};
};
using up_human = std::unique_ptr<human>;
class man :public human
{
public:
	man() { std::cout << "男人被创建了\n"; }
};
class woman :public human
{
public:
	woman() { std::cout << "女人被创建了\n"; }
};
class transgender :public human
{
public:
	transgender() { std::cout << "人妖被创建了\n"; }
};
class humanFactory
{
public:
	virtual up_human CreateHuman() = 0;
	virtual ~humanFactory() {};
};
using up_human_factory = std::unique_ptr<humanFactory>;
class manFactory:public humanFactory
{
public:
	up_human CreateHuman() override
	{
		return std::make_unique<man>();
	}
};
class womanFactory :public humanFactory
{
public:
	up_human CreateHuman() override
	{
		return std::make_unique<woman>();
	}
};
class transFactory :public humanFactory
{
public:
	up_human CreateHuman() override
	{
		return std::make_unique<transgender>();
	}
};
up_human Glb_CreateHuman(up_human_factory h_F)
{
	return h_F->CreateHuman();
}
int main()
{
		Glb_CreateHuman(std::make_unique<manFactory>());
		Glb_CreateHuman(std::make_unique<womanFactory>());
		Glb_CreateHuman(std::make_unique<transFactory>());
}

猜你喜欢

转载自blog.csdn.net/qq_16401691/article/details/128082554
今日推荐