2017《面向对象程序设计》课程作业七
请将随机生成数字、表达式的部分设计成:一个Random基类,基类中有random()方法。并由该基类派生出RandomNumber类、RandomOperation类,继承并覆盖父类方法。
有一个随机类作为基类,随机数类和随机符号类继承基类,各自增加保护成员随机数和随机符号,后在各自的random()方法中对随机数和随机符号赋值。
随机表达式类通过保护继承的方式继承随机数类和随机符号类,在random()方法中将随机数和随机符号组合成随机表达式。使用时需要新建一个RandomExpression对象,并调用它的random()函数。
github
class Random{
public:
void random()
{
}
};
class RandomOperation:protected Random{
public:
void random()
{
int temp;
char operations[]={"+-*/"};
srand(time(NULL));
for(int i=1;i<=3;i++)
{
temp=rand()%4;
op[i]=operations[temp];
}
}
protected:
char op[4];
};
class RandomNumber:protected Random{
public:
void random()
{
n[1]=rand()%10;
n[2]=rand()%10;
n[3]=rand()%10;
n[4]=rand()%10;
}
protected:
int n[5];
};
class RandomExpression:protected RandomOperation,protected RandomNumber{
public:
void random()
{
RandomOperation::random();
RandomNumber::random();
sprintf(expression,"%d%c%d%c%d%c%d",n[1],op[1],n[2],op[2],n[3],op[3],n[4]);
}
public:
char expression[8];
};
学习简单工厂模式,思考能否将该模式运用到题目的第一点要求中。
看了一些博文后,结合自己的理解,感觉简单工厂模式充当了一个switch语句,根据switch的结果,具体的操作是建立不同的对象。
适用场合:1. 在程序中,需要创建的对象很多,导致对象的new操作多且杂时,需要使用简单工厂模式;
2. 由于对象的创建过程是我们不需要去关心的,而我们注重的是对象的实际操作,所以,我们需要分离对象的创建和操作两部分,如此,方便后期的程序扩展和维护。
优点:简单工厂模式能够根据外界给定的信息,决定究竟应该创建哪个具体类的对象。明确区分了各自的职责和权力,有利于整个软件体系结构的优化。
以上摘自我看的两篇文章:
详解设计模式之工厂模式(简单工厂+工厂方法+抽象工厂)
C++设计模式——简单工厂模式
两篇文章举的例子都很好地帮助我理解。通过展现简单工厂模式被使用的场景,我有一点理解到简单工厂模式出现的原因。
至于把简单工厂模式运用到本次作业的第一个要求,依我浅薄的理解,我觉得很勉强。。。。。。首先我不知道这个要求中自己的理解对不对,A产品是随机数,B产品是随机操作符这样的吗?然而在一次出题中只要建立一个RandomExpression对象,如果特意创建一个工厂类分别生产随机数和随机操作符再把它们组合起来,这样操作不会显得多余吗?以及把随机数和随机操作符单独拿出来成类我也觉得很奇怪。。。我之前已经把这两个当做成员函数封装到算式类里面了啊。。。。。。