C++实现简单工厂模式等的设计应用

一、题目分析

通过代码实现以下三种工厂模式并进行测试

(1)简单工厂模式

使用简单工厂模式模拟女娲(Nvwa)造人(Person),如果传入参数M,则返回一个Man对象,如果传入参数W,则返回一个Woman对象,请实现该场景。现需要增加一个新的Robot类,如果传入参数R,则返回一个Robot对象,对代码进行修改并注意女娲的变化。

(2)工厂方法模式

海尔工厂(Haier)生产海尔空调(HaierAirCondition),美的工厂(Midea)生产美的空调(MideaAirCondition) 。使用工厂方法模式描述该场景,绘制类图并编程实现。

(3)抽象工厂模式

电脑配件生产工厂生产内存、CPU等硬件设备,这些内存、CPU的品牌、型号并不一定相同,根据下面的“产品等级结构-产品族”示意图,使用抽象工厂模式实现电脑配件生产过程并绘制相应的类图,绘制类图并编程实现。

二、类图设计

(1)简单工厂模式

在这里插入图片描述

(2)工厂模式

在这里插入图片描述

(3)抽象工厂模式

在这里插入图片描述

三、程序实现

(1)简单工厂模式
#include<iostream>
#include<string>
using namespace std;
class Person
{
protected:
	string sex;
public:
	virtual void set_sex() {};
	virtual string get_sex()
	{
		return sex;
	}
};

class Man :public Person
{
public:
	virtual void set_sex()
	{
		sex = "男人";
	}
	virtual string get_sex()
	{
		return sex;
	}
};

class Woman :public Person
{
public:
	virtual void set_sex()
	{
		sex = "女人";
	}
	virtual string get_sex()
	{
		return sex;
	}
};

class Robot :public Person
{
public:
	virtual void set_sex()
	{
		sex = "机器人";
	}
	virtual string get_sex()
	{
		return sex;
	}
};

class Factory
{
public:
	static Person* produce(char kind)
	{
		switch (kind)
		{
		case 'M':
		{
			Person* pro = new Man();
			break;
		}
		case 'W':
		{
			Person* pro = new Woman();
			break;
		}
		case 'R':
		{
			Person* pro = new Robot();
			break;
		}
		}
	}
};

int main()
{
	Person* pro1;
	pro1 = Factory::produce('M');
	pro1->set_sex();
	string result1 = pro1->get_sex();
	cout << "女娲造" << result1 << endl;
	Person* pro2;
	pro2 = Factory::produce('W');
	pro2->set_sex();
	string result2 = pro2->get_sex();
	cout << "女娲造" << result2 << endl;
	Person* pro3;
	pro3 = Factory::produce('R');
	pro3->set_sex();
	string result3 = pro3->get_sex();
	cout << "女娲造" << result3 << endl;
}
(2)工厂模式
#include<iostream>
#include<string>
using namespace std;

class Producer
{
protected:
	string brand;
public:
	virtual void output()
	{
		cout << brand << "工厂生产" << brand << "空调" << endl;
	}
};

class Producer_Haier :public Producer
{
protected:
	string brand = "Haier";
public:
	virtual void output()
	{
		cout << brand << "工厂生产" << brand << "空调" << endl;
	}
};

class Producer_Midea :public Producer
{
protected:
	string brand = "Midea";
public:
	virtual void output()
	{
		cout << brand << "工厂生产" << brand << "空调";
	}
};

class Factory
{
public:
	virtual Producer* producer() = 0;
};

class Factory_Haier :public Factory
{
public:
	Producer* producer()
	{
		return new Producer_Haier;
	}
};

class Factory_Midea :public Factory
{
public:
	Producer* producer()
	{
		return new Producer_Midea;
	}
};

int main()
{
	Factory_Haier* fh = new Factory_Haier();
	Factory_Midea* fm = new Factory_Midea();
	Producer* pro = fh->producer();
	pro->output();
	pro = fm->producer();
	pro->output();
	return 0;
}
(3)抽象工厂模式
#include<iostream>
#include<string>
using namespace std;

class PC
{
protected:
	string name = "PC";
public:
	virtual void output() = 0;
};

class MAC
{
protected:
	string name = "MAC";
public:
	virtual void output() = 0;
};

class PC_CPU :public PC
{
public:
	virtual void output()
	{
		cout << "CPU工厂生产" << name << "_CPU" << endl;
	}
};

class PC_RAM :public PC
{
public:
	virtual void output()
	{
		cout << "RAM工厂生产" << name << "_RAM" << endl;
	}
};

class MAC_CPU :public MAC
{
public:
	virtual void output()
	{
		cout << "CPU工厂生产" << name << "_CPU" << endl;
	}
};

class MAC_RAM :public MAC
{
public:
	virtual void output()
	{
		cout << "RAM工厂生产" << name << "_RAM" << endl;
	}
};

class Factory
{
public:
	virtual PC* pc() = 0;
	virtual MAC* mac() = 0;
};

class Factory_CPU :public Factory
{
public:
	PC_CPU* pc()
	{
		return new PC_CPU;
	}
	MAC_CPU* mac()
	{
		return new MAC_CPU;
	}
};
class Factory_RAM :public Factory
{
public:
	PC_RAM* pc()
	{
		return new PC_RAM;
	}
	MAC_RAM* mac()
	{
		return new MAC_RAM;
	}
};

int main()
{
	Factory_CPU* f_c = new Factory_CPU();
	Factory_RAM* f_r = new Factory_RAM();
	PC* p1 = f_c->pc();
	PC* p2 = f_r->pc();
	MAC* m1 = f_c->mac();
	MAC* m2 = f_r->mac();
	p1->output();
	p2->output();
	m1->output();
	m2->output();
}

四、调试、测试及运行结果

(1)简单工厂模式
在这里插入图片描述
(2)工厂模式
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(3)抽象工厂模式

在这里插入图片描述
在这里插入图片描述

五、经验归纳

通过这次的作业,我从头到尾的完整使用了三种工厂模式来实现的相关的功能,同时也在修改代码的时候感悟到了各种工厂模式的优劣,简单工厂模式结构简单但是添加新的成分需要修改大量代码,工厂模式简单但是不能适应多元的工厂生产模式,抽象工厂方法适用于产品种类结构多的场合,主要用于创建一组(有多个种类)相关的产品,为它们提供创建的接口;就是当具有多个抽象角色时,抽象工厂便可以派上用场。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值