第七次课程作业

课程作业七

生成随机数类的代码

git链接

class Random//生成随机数的基类
{
public:
	virtual int random() = 0;
	Random() {}
	virtual ~Random() {}
};
class RandomNumber :public Random//生成随机数的类
{
public:
	int random()
	{
		return rand() % 10;
	}
	RandomNumber() {}
	virtual ~RandomNumber() {}
};
class RandomOperation :public Random//生成随机运算符代表数字的类
{
public:
	int random()
	{
		return rand() % 4;
	}
	RandomOperation() {}
	virtual ~RandomOperation() {}
};
class RandomClass :public Random//产生随机类型的算式
{
public:
	int random()
	{
		return rand() % 2;
	}
	RandomClass() {}
	virtual ~RandomClass() {}
};

简单工厂模式的学习

简单工厂模式其实就是建立一个工厂,我们要用的类就是产品,要是没有工厂,当我们要用到类时,只能让产品自己生产,要是有了工厂,只要给工厂一个指令,就能让工厂生产出我们需要的产品来。

上面的生成随机数当然也可以写成简单工厂模式

class Random//随机数基类
{
public:
	virtual int random()=0;
	Random() {};
	virtual ~Random() {};
};

class RandomNumber :public Random//生成算式随机数
{
public:
	int random()
	{
		return rand() % 10;
	}
};
class RandomOperation :public Random//生成算数运算符代表数字
{
public:
	int random()
	{
		return rand() % 4;
	}
};
class RandomClass :public Random//生成决定是哪一种类型的数字
{
public:
	int random()
	{
		return rand() % 2;
	}
};
class RandomFactory//工厂
{
public:
	static Random* creatRandom(int c)//c为传入的指令
	{
		switch (c)
		{
		case 0:
			return new RandomNumber; break;
		case 1:
			return new RandomOperation; break;
		case 2:
			return new RandomClass; break;
		}
	}
};

但是简单工厂模式有缺点,当我们需要的产品越来越多时,就不得不修改工厂的代码,这就破坏了OCP原则

OCP原则:一个软件实体如类,模块和函数应该对扩展开放,对修改关闭

所以就有了

工厂模式

工厂模式是我需要什么产品,我就建立什么工厂,这样就不用修改工厂的代码

class Random//随机数基类
{
public:
	virtual int random()=0;
	Random() {};
	virtual ~Random() {};
};

class RandomNumber :public Random//生成算式随机数
{
public:
	int random()
	{
		return rand() % 10;
	}
};
class RandomOperation :public Random//生成算数运算符代表数字
{
public:
	int random()
	{
		return rand() % 4;
	}
};
class RandomClass :public Random//生成决定是哪一种类型的数字
{
public:
	int random()
	{
		return rand() % 2;
	}
};
class RandomFactory//工厂基类
{
public:
	virtual Random* creatRandom() = 0;
};
class RandomNumberFactory :public RandomFactory//算式随机数工厂
{
public:
	Random * creatRandom()
	{
		return new RandomNumber;
	}
};
class RandomOperationFactory :public RandomFactory//算式运算符随机数工厂
{
public:
	Random* creatRandom()
	{
		return new RandomOperation;
	}
};
class RandomClassFactory :public RandomFactory//算式类型随机数工厂
{
public:
	Random* creatRandom()
	{
		return new RandomClass;
	}
};

这个模式也有缺陷,就是如果需要的产品太多,维护的量也就多了

所以以后new时就要多个心眼,是否可以考虑使用工厂模式,虽然这样做,可能多做一些工作,但会给你系统带来更大的可扩展性和尽量少的修改量

posted on 2017-06-07 21:13  caiziyang  阅读(182)  评论(0编辑  收藏  举报