工厂模式总结

简单工厂模式

#include <iostream>
using namespace std;

/****************************************
功能设计:类定义
****************************************/
typedef enum {
	PRODUCT_TYPE_HAIR,
	PRODUCT_TYPE_HISENCE
} PRODUCT_TYPE;

// 抽象产品类
class TV {
public:
	virtual void show() = 0;
	virtual ~TV();
};

// 具体产品类:HairTV
class HairTV : public TV {
public:
	void show() override;
};

// 具体产品类:HisenceTV
class HisenceTV : public TV {
public:
	void show() override;
};

// 简单工厂
class TVFactory {
public:
	TV* CreateTV(PRODUCT_TYPE type);
};

/****************************************
功能设计:类函数成员实现
****************************************/
TV::~TV()
{
}

void HairTV::show()
{
	cout << "I am HairTV" << endl;
}

void HisenceTV::show()
{
	cout << "I am HisenceTV" << endl;
}

TV* TVFactory::CreateTV(PRODUCT_TYPE type)
{
	switch (type)
	{
	case PRODUCT_TYPE_HAIR:
		return new HairTV();
	case PRODUCT_TYPE_HISENCE:
		return new HisenceTV();
	default:
		return NULL;
	}
}

/****************************************
功能设计:main调用
****************************************/
int main()
{
	// 创建工厂对象
	TVFactory* tvFactory = new TVFactory();
	// 创建HairTV产品
	TV* hairTV = tvFactory->CreateTV(PRODUCT_TYPE_HAIR);
	if (NULL == hairTV)
	{
		cout << "hairTV is NULL" << endl;
		return -1;
	}
	hairTV->show();

	// 创建HisenceTV产品
	TV* hisenceTV = tvFactory->CreateTV(PRODUCT_TYPE_HISENCE);
	if (NULL == hisenceTV)
	{
		cout << "hisenceTV is NULL" << endl;
		return -1;
	}
	hisenceTV->show();

	// 销毁
	delete tvFactory;
	tvFactory = NULL;
	delete hairTV;
	hairTV = NULL;
	delete hisenceTV;
	hisenceTV = NULL;
	system("pause");
	return 0;

}

工厂模式

#include <iostream>
using namespace std;

///****************************************
//功能设计:类定义
//****************************************/
// 抽象产品类
class TV {
public:
	virtual void show() = 0;
};

// 具体产品HairTV
class HairTV : public TV {
public:
	void show() override;
};

// 具体产品HisenceTV
class HisenseTV : public TV {
public:
	void show() override;
};

// 抽象工厂
class TVFactory {
public:
	~TVFactory();
	virtual TV* CreateTV() = 0;
};

// 具体工厂类:HairTVFactory
class HairTVFactory : public TVFactory {
public:
	TV* CreateTV() override;
};

// 具体工厂类:HisenseTVFactory
class HisenseTVFactory : public TVFactory {
public:
	TV* CreateTV() override;
};

/****************************************
功能设计:类函数成员实现
****************************************/
TVFactory::~TVFactory()
{

}

void HairTV::show()
{
	cout << "I am HairTV" << endl;
}

void HisenseTV::show()
{
	cout << "I am HisenceTV" << endl;
}

TV* HairTVFactory::CreateTV()
{
	return new HairTV();
}

TV* HisenseTVFactory::CreateTV()
{
	return new HisenseTV();
}

/****************************************
功能设计:main调用
****************************************/
int main()
{
	// 定义具体工厂:HairTVFactory
	TVFactory *hairTVFactory = new HairTVFactory();
	// 创建具体产品:hairTV
	TV* hairTV = hairTVFactory->CreateTV();
	hairTV->show();

	// 定义具体工厂:HisenseTVFactory
	TVFactory *hisenseTVFactory = new HisenseTVFactory();
	// 创建具体产品:hairTV
	TV* hisenseTV = hisenseTVFactory->CreateTV();
	hisenseTV->show();

	system("pause");
	return 0;
}

抽象工厂模式

/****************************************
功能设计:抽象工厂模式
抽象工厂模式是工厂模式的泛化版,工厂模式是一种特殊的抽象工厂模式。
在工厂模式中,每个具体工厂只能生产一种具体产品。如海尔电视机厂只能生产海尔电视机
而抽象工厂中,一个具体的工厂可以生产多个具体产品
****************************************/
#include <iostream>
using namespace std;

/****************************************
功能设计:类定义
****************************************/
// 抽象产品TV
class TV {
public:
	virtual void show() = 0;
};

// 抽象产品AirCondition
class AirCondition {
public:
	virtual void show() = 0;
};

// 具体产品HairTV
class HairTV : public TV {
public:
	void show() override;
};

// 具体产品HisenseTV
class HisenseTV : public TV {
public:
	void show() override;
};

// 具体产品HairAirCondition
class HairAirCondition : public AirCondition {
public:
	void show() override;
};

// 具体产品HisenseAirCondition
class HisenseAirCondition : public AirCondition {
public:
	void show() override;
};

// 抽象工厂Factory
class Factory {
public:
	virtual TV* CreateTV() = 0;
	virtual AirCondition* CreateAirCondition() = 0;
};

// 具体工厂HairFactory
class HairFactory : public Factory {
public:
	TV* CreateTV() override;
	AirCondition* CreateAirCondition() override;
};

// 具体工厂HisenseFactory
class HisenseFactory : public Factory {
public:
	TV* CreateTV() override;
	AirCondition* CreateAirCondition() override;
};

/****************************************
功能设计:类成员函数实现
****************************************/
void HairTV::show()
{
	cout << "I am HairTV" << endl;
}

void HisenseTV::show()
{
	cout << "I am HisenseTV" << endl;
}

void HairAirCondition::show()
{
	cout << "I am HairAirCondition" << endl;
}

void HisenseAirCondition::show()
{
	cout << "I am HisenseAirCondition" << endl;
}

TV* HairFactory::CreateTV()
{
	return new HairTV();
}

AirCondition* HairFactory::CreateAirCondition()
{
	return new HairAirCondition();
}

TV* HisenseFactory::CreateTV()
{
	return new HisenseTV();
}

AirCondition* HisenseFactory::CreateAirCondition()
{
	return new HisenseAirCondition();
}

/****************************************
功能设计:main函数
****************************************/
int main()
{
	// 获取具体工厂HairFactory
	Factory* hairFactory = new HairFactory();
	TV* hairTV = hairFactory->CreateTV();
	hairTV->show();
	AirCondition* hairAirCondition = hairFactory->CreateAirCondition();
	hairAirCondition->show();

	// 获取具体工厂HisenseFactory
	Factory* hisenseFactory = new HisenseFactory();
	TV* hisenseTV = hisenseFactory->CreateTV();
	hisenseTV->show();
	AirCondition* hisenseAirCondition = hisenseFactory->CreateAirCondition();
	hisenseAirCondition->show();

	system("pause");
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值