第七次课程作业

Github

题目描述

  • 请将随机生成数字、表达式的部分设计成:一个Random基类,基类中有random()方法。并由该基类派生出RandomNumber类、RandomOperation类,继承并覆盖父类方法。
  • 学习简单工厂模式,思考能否将该模式运用到题目的第一点要求中。

作业要求

  • 体会继承和多态的思想
  • 发表一篇博客,博客内容为:提供本次作业的github链接,题目描述的代码部分的解释、简单工厂模式的学习。

代码解释

改写后的程序共有四类,它们之间的继承派生关系如下:

基类:

class Random	//基类  
{
protected:
	int n;		//作为随机数使用 
public:
	virtual void random()=0;			//纯虚函数,留给派生类重载 
};

(直接派生类)生成随机数类:

class RandomNumber:virtual public Random		//生成随机数 
{
protected:
	int num[5]; 	//添加成员,存储随机数 
public: 
	void random();					//重载 
	int get_number(int i)	
	{
		return num[i];
	}
};

(直接派生类)生成随机运算符

class RandomOperation:virtual public Random			//生成随机运算符 
{
protected:
	char operation[4];					//添加成员,存储随机符号 
public:
	void random();						//重载 
	char get_operation(int i)
	{
		return operation[i];
	}
};

(间接派生类)生成随机式子

class RandomExpression:public RandomOperation,public RandomNumber		//随机式子部分 
{
public:
	RandomExpression();											//构造函数
	RandomExpression(RandomNumber &t1,RandomOperation &t2)		//构造函数 
	{
		for(int i=1;i<5;i++)
		{
			num[i]=t1.get_number(i);
		}
		for(int i=1;i<4;i++)
		{
			operation[i]=t2.get_operation(i);
		}
	}
	void random(){};
	void random(char s[30]);
};

其中随机数字类的成员函数:

void RandomNumber::random()     //生成随机数字类的成员函数			
{
	srand(time(0));
	for(int j=1;j<=4;j++)
	{
		n=rand()%10;
		num[j]=n;
	}
}

随机运算符类的成员函数:

void RandomOperation::random()  //随机运算符类的成员函数
{
	srand(time(0));
	for(int j=1;j<=3;j++)
	{
		n=rand()%4;
    	switch(n)
		{
          	case 0:operation[j]='+';break;
        	case 1:operation[j]='-';break;
			case 2:operation[j]='*';break;
			default:operation[j]='/';
		}
	}
}

随机式子部分较长不贴出。
我对于继承和多态的看法:使用继承和多态,能够省去类之间的共同部分,同时它将类之间的共同部分抽取出来作为基类,由基类层层派生,使得各类之间的逻辑关系更加得清晰。

简单工厂模式的学习

工厂模式有简单工厂模式、工厂方法模式和抽象工厂模式三种,本次要求学习的是简单工厂模式。
简单工厂模式的核心思想是:有一个专门的类来负责创建实例的过程。

简单工厂模式中包含的角色及其相应的职责如下:

  • 工厂角色(Creator):这是简单工厂模式的核心,由它负责创建所有的类的内部逻辑。当然工厂类必须能够被外界调用,创建所需要的产品对象。
  • 抽象(Product)产品角色:简单工厂模式所创建的所有对象的父类,注意,这里的父类可以是接口也可以是抽象类,它负责描述所有实例所共有的公共接口。
  • 具体产品(Concrete Product)角色:简单工厂所创建的具体实例对象,这些具体的产品往往都拥有共同的父类。

我的理解是存在一个“工厂”,用户只需给它下达命令,这个“工厂”就能够生产出各种用户所需的不同“产品”,而这些“产品”都有着共同的父类。在这个程序当中,父类即为Random类,“产品”则是RandomNumber、RandomOperation和RandomExpression这三类。工厂通过用户的命令来进行不同的调用。
优点:能够根据不同的外界信息进行类的调用,各类的职责分明,优化了程序结构。
缺点:当要增加新的类时,既要补充新类,也要改变工厂类,违背了“系统对扩展开放,对修改关闭”的原则。

参考资料:
1.http://www.cnblogs.com/toutou/p/4899388.html
2.http://blog.chinaunix.net/uid-25958655-id-4243289.html
3.http://blog.csdn.net/weiwenlongll/article/details/6918164

原文地址:https://www.cnblogs.com/z031602148/p/6964857.html