设计模式-工厂模式

工厂模式通常又可以分为简单工厂模式、工厂模式、抽象工厂模式;他们有一个共同的类并从它继承而来。

工厂的实现:

工厂(creater)角色

所有的内部逻辑可以被外部对象调用;

抽象(Product)角色

所有具体产品的公共接口;

具体产品(Concrete Product)

具体实例对象;

简单工厂模式代码实现:

#include<iostream>

using namespace std;

class Fruit
{
public:
	virtual void GetFruit() = 0;
	virtual ~Fruit() {}
};

class Apple:public Fruit
{
public:
	virtual void GetFruit()
	{
		cout << "i am Apple" << endl;
	}
};

class Banana :public Fruit
{
public:
	virtual void GetFruit()
	{
		cout << "i am Banana" << endl;
	}
};

class Facotry
{
public:
	Fruit* SetFruit(const char* p)
	{
		if (strcmp(p, "Apple") == 0)
		{
			return new Apple;
		}
		else if (strcmp(p, "Banana") == 0)
		{
			return new Banana;
		}
		else
		{
			return nullptr;
		}
	}
};

int main()
{
	Facotry* f = new Facotry;
	Fruit* Banana = f->SetFruit("Banana");
	Banana->GetFruit();
	delete Banana;

	delete f;


	return system("pause");
}

工厂模式代码实现:

#include<iostream>

using namespace std;

class Fruit
{
public:
	virtual void GetFruit() = 0;
	virtual ~Fruit() {}
};

class Apple:public Fruit
{
public:
	virtual void GetFruit()
	{
		cout << "i am Apple" << endl;
	}
};

class Pear :public Fruit
{
public:
	virtual void GetFruit()
	{
		cout << "i am Pear" << endl;
	}
};

class AdvFactory
{
public:
	virtual Fruit* SetFruit() = 0;
};


class AppleFactory :public AdvFactory
{
public:
	virtual Fruit* SetFruit()
	{
		return new Apple;
	}
};

class PearFactory :public AdvFactory
{
public:
	virtual Fruit* SetFruit()
	{
		return new Pear;
	}
};

int main()
{
	AdvFactory* Adv = nullptr;
	Fruit* f = nullptr;

	Adv = new AppleFactory;
	f = Adv->SetFruit();
	f->GetFruit();

	delete f;
	delete Adv;


	Adv = new PearFactory;
	f = Adv->SetFruit();
	f->GetFruit();

	delete f;
	delete Adv;

	return system("pause");
}

工厂模式与简单工厂模式的差异在于工厂模式的解耦和,实现功能的单一职责原则。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值