第七次课程作业
课程作业七
生成随机数类的代码
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时就要多个心眼,是否可以考虑使用工厂模式,虽然这样做,可能多做一些工作,但会给你系统带来更大的可扩展性和尽量少的修改量