zoukankan      html  css  js  c++  java
  • 第七次课程作业

    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

  • 相关阅读:
    真情感动看上海新闻娱乐频道“百家心”
    Treeview Navigation Web Part for SharePoint with SmartPart v1.0
    轻松玩转Typed DataSet, Part III
    微软Avalon和WinForms的发展蓝图
    Proxy Pattern using C#
    System.Threading.Timer类的TimerCallback 委托
    SmartPart v1.0 for SharePoint [Free Web Part]
    分布式应用架构中的数据传输对象(DTO)
    定制SharePoint Portal Server 2003站点的向导
    Bridge Pattern using C#
  • 原文地址:https://www.cnblogs.com/z031602148/p/6964857.html
Copyright © 2011-2022 走看看