Loading

第七次课程作业——派生类与简单工厂的实现

第七次课程作业——派生类与简单工厂的实现

Part 1. Github地址:

包含简单工厂的.h文件Expression.h和.cpp文件Expression.cpp

Part 2. 相关代码的实现

//Expression.h文件
class Random  //Random基类
{
public:
	virtual int random() = 0;      //随机生成的公共接口
	virtual ~Random() {};
};

class RandomNumber :public Random         //派生出RandomNumber类
{
public:
	int random();                //声明随机生成数字的接口
	RandomNumber() {}
};

class RandomOperation :public Random      //派生出RandomOperation类
{
public:
	int random();                //声明随机生成运算符的接口
	RandomOperation() {}
};

class RandomFactory     //简单随机生成命令的工厂的构建
{
public:
	Random *creatRandom(const string &name)      //依据你想要的产品名称进行产品的生产
	{
		if(name=="Randomnum")
		{
			return new RandomNumber;
		}
		if(name=="RandomOpe")
		{
			return new RandomOperation;
		}
	}
};
//Expression.cpp文件
int RandomNumber::random()    //对随机生成数字的接口进行定义
{
	int d;
	d = rand() % 10 + 1;
	return d;
}

int RandomOperation::random()     //对随机生成运算符的接口进行定义
{
	int n = rand() % 4;
	char sym;
	switch (n)
	{
	case 0: sym = '+';break;
	case 1: sym = '-';break;
	case 2: sym = '*';break;
	case 3: sym = '/';break;
	}
	return sym;
}

RandomFactory factory;      //创建一个执行随机生成命令的工厂

for (int i = 0;i <= 3;i++)
{
    Random* pointNum = factory.creatRandom("Randomnum");    //指出想要的产品"Randomnum"
    number[i] = pointNum -> random();    //指向生成随机数的接口
}

for (int j = 0;j <= 2;j++)
{
    Random* pointOpe = factory.creatRandom("RandomOpe");    //指出想要的产品"RandomOpe"
    sign[j] = pointOpe -> random();		//指向生成运算符的接口
}

Part 3. 简单工厂的认识与理解

简单工厂模式包含如下角色:

  • Factory(工厂角色:RandomFactory):负责实现创建所有实例的内部逻辑
  • Product(抽象产品角色:Random):是所创建的所有对象的父类,负责描述所有实例所共有的公共接口
  • ConcreteProduct(具体产品角色:RandomNumber和RandomOperation):创建目标,所有创建的对象都充当这个角色的某个具体类的实例。

谈谈个人对简单工厂的理解:

在工厂已经明确生产产品的目的以后,由用户根据自己所需去规定想要工厂所生产的产品,这样提供具体生产类由用户决定然后生产即为简单工厂的生产模式。因此,简单工厂只需要知道具体产品类所对应的参数,即可获取你所想要的产品。然而这样却增加系统中类的个数,在一定程序上增加了系统的复杂度和理解难度,遇到大量的具体产品类时,维护起来就不容易了。

以上就是我本次作业实现的所有成果与心得体会,谢谢观赏,以上。

posted @ 2017-06-08 03:09  诀别、泪  阅读(233)  评论(0编辑  收藏  举报