题目描述
- 请将随机生成数字、表达式的部分设计成:一个Random基类,基类中有random()方法。并由该基类派生出RandomNumber类、RandomOperation类,继承并覆盖父类方法。
- 学习简单工厂模式,思考能否将该模式运用到题目的第一点要求中。
作业要求 - 体会继承和多态的思想
- 发表一篇博客,博客内容为:提供本次作业的github链接,题目描述的代码部分的解释、简单工厂模式的学习。
这次作业主要是用简单工厂模式来改写random类,顺便训练一下继承的使用。我是在上次作业的上次作业基础上改写的,应该是第五次作业,那次的GitHub链接在这里,这次换了一个新仓库,
我参考了以下两篇文章C++实现设计模式之 — 简单工厂模式、三种工厂模式的分析以及C++实现
我觉得,简单工厂模式中是通过指向基类的指针和基类的虚函数来访问子类中对继承的虚函数的实现。或者用别人的话可能更好理解:
简单工厂模式的核心是,对于一个父类的多个继承子类,工厂对象的工厂函数根据用户输入,自动new出一个子类对象并返回其父类的指针,这样利用父类的指针执行父类的虚函数,就可以动态绑定子类的重写函数,从而实现多态。
接下来我就把我的random类改了
新增了simplefactory类
equation类里的调用换成这样
我想那个simplefactory是用来隐藏真正的factory吧。
用简单工厂类的话外界仅仅需要负责“消费”对象就可以了,而不必管这些对象究竟如何创建及如何组织的,分工更明确了。但是每增加一种实现就要在类里面再写一种进去,不同的实现太多的话就显得杂乱了不利于以后的维护和拓展。我在改的时候其实是觉得代码变复杂了。
至于子类覆盖父类,不知道我这样算不算,感觉他们的共同点就是rand(),而srand()这个种子生成器是不能放在和rand()同一个类里实现的,否则生成的随机数就都一样了。它必须放在调用rand()这个类之前和之外。