• 2017《面向对象程序设计》课程作业七


    2017《面向对象程序设计》课程作业七

    031602230 卢恺翔

    Github传送门


    题目要求

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

    简单工厂模式

    简单工厂模式(Simple Factor Pattern)属于类的创新型模式,又叫静态工厂方法模式(Static FactoryMethod Pattern),是通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。

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

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

    这就像一个小工厂,你不需要知道这些产品是怎么出来的,你只需要下一个订单,他就能生产出你想要的东西。例如本次作业中,通过输入“rannum”就可以让工厂生产随机数,通过输入“ranope”就可以生产出随机符号。这大大降低了代码的难度,只需要通过输入一些指令,就能生产出相应的东西,非常的实用和方便。

    但是一旦产品的种类变多的时候,工厂类就需要判断何时创建何种种类的产品,这就和创建何种种类产品的产品相互混淆在了一起,违背了单一职责,导致系统丧失灵活性和可维护性。

    生成基类Random

    class Random
    {
    protected:
    	int num;		//产生的随机数
    	char sym;		//产生的随机字符
    public:
    	virtual int random()=0;//创造虚函数,建立公共接口
    };
    

    派生类RandomNumber

    Random.h文件

    class RandomNumber :public Random//用于随机生成数字
    {
    public:
    	int random();		//公共接口
    };
    

    Random.cpp文件

    int RandomNumber::random()//用于随机生成数字
    {
    	num = rand() % 10 + 1;
    	return num;
    }
    

    派生类RandomOperation

    Random.h文件

    class RandomOperation :public Random//用于随机生成运算符
    {
    public:
    	int random();       //公共接口
    };
    

    Random.cpp文件

    int RandomOperation::random()
    {
    	int n = rand() % 4;//用于随机生成运算符
    	switch (n)
    	{
    	case 0: sym = '+'; break;
    	case 1: sym = '-'; break;
    	case 2: sym = '*'; break;
    	case 3: sym = '/'; break;
    	}
    	return sym;
    }
    

    创建工厂

    class RandomFactory		//创建工厂
    {
    public:
    	Random *randomrandom(string name)	//根据需求来选择产生什么样的产品(生产随机数/随机符号)
    	{
    		if (name == "rannum")
    			return new RandomNumber;
    		else if (name == "ranope")
    			return new RandomOperation;
    	}
    };
    

    工厂将通过输入不同的指令来生产不同的产品(生产随机数/随机符号)

    在main函数中,不管输入什么不同的指令,都调用相同的接口random函数,就可以产生出不同的产品。所以random函数在这里起着至关重要的类似桥梁的作用。

    main.cpp(部分代码,详见GitHub

    string generateExpression(int i,char *p)		//用于生成运算式
    {
    	RandomFactory ranfactory;			//创建工厂
    	Random *ranp = ranfactory.randomrandom("rannum");//选择产生随机数
    	int n1, n2;
    	n1 = ranp->random();
    	n2 = ranp->random();
    	ranp = ranfactory.randomrandom("ranope");//选择产生随机字符
    	char sign;
    	sign = ranp->random();
    
  • 相关阅读:
    适合程序员的两样工具-续集
    JavaScript之面向对象1
    人类简史笔记摘录
    做正确的事
    个人高效率任务列表
    视频技术基础
    了解更多梭罗与瓦尔登湖
    禅与摩托车维修的艺术
    人工智能发展及算法
    互联网没能降低房价,人工智能就可以不?
  • 原文地址:https://www.cnblogs.com/leolkx/p/6964536.html
Copyright © 2020-2023  润新知