第七次课程作业——派生类与简单工厂的实现
第七次课程作业——派生类与简单工厂的实现
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):创建目标,所有创建的对象都充当这个角色的某个具体类的实例。
谈谈个人对简单工厂的理解:
在工厂已经明确生产产品的目的以后,由用户根据自己所需去规定想要工厂所生产的产品,这样提供具体生产类由用户决定然后生产即为简单工厂的生产模式。因此,简单工厂只需要知道具体产品类所对应的参数,即可获取你所想要的产品。然而这样却增加系统中类的个数,在一定程序上增加了系统的复杂度和理解难度,遇到大量的具体产品类时,维护起来就不容易了。
以上就是我本次作业实现的所有成果与心得体会,谢谢观赏,以上。