简单工厂模式与纯虚函数的应用

来源:互联网 发布:产品360度展示软件 编辑:程序博客网 时间:2024/05/20 16:34

先简单对虚函数与纯虚函数做一下介绍:
两者都是为了解决程序的动态多态问题而设计的所以都可以达到对函数运行多态问题的解决,另外值得一提的是两者的虚析构函数与纯虚析构函数的定义将使派生类中的析构函数也都为虚析构函数,由此可实现析构函数调用时的多态。下面说两者的不同之处。
虚函数是处于一个可以实例化对象的类中,而纯虚函数则是处于一个不可以实例化对象的抽象类中,其派生类只有把所有的纯虚函数都重载之后才可以实例化对象。在虚函数中有其独特的性质,虚函数是动态绑定的基础且必须是非静态的成员函数,实现多态处理的问题是:如果需要通过基类的指针指向派生类的对象,并访问某个与基类同名的成员函数,那么首先在基类中将这个同名函数说明为虚函数,这样依据赋值兼容规则向上造型就可以实现运行过程多态,这一点纯虚函数也是可以做到的,在这里只是稍微提一下而已。虚函数因为是动态绑定所以一般不做为内联函数处理,不过将其声明为内联函数也不会出错。若派生类中有函数与基类中的虚函数意义相同时则这个函数被默认为是虚函数,且覆盖掉基类的虚函数,不过仅仅是覆盖想要访问仍然可以用类作用域符号进行访问。
纯虚函数简单来说就是一个抽象类,不可实例化对象,他是给类消费者提供一个规范唯一的借口;其中的所有数据与成员函数都需要经过派生类进行实现 才可以。
下面来说说简单工厂模式,这种模式将工作分为两部分,一是生产类,二是消费类。对消费类而言他知道他所需要的功能是怎样的,也就是说他所要的就是可以实现他的目的接口,而不管这功能具体是怎样实现的。相当于他提供给生产类了一套标准接口;而对生产类来说它需要根据各类的接口与消费者要求的接口设计出一个特别的类将两者联系起来实现相应的功能。由此可知当类的种类比较多时这种方法就会出现问题,在这里我们不谈这个问题。下面看一个例子来感受一下工厂模式这里写图片描述!
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这是一个简单的工厂模式,其中定义了正方体,球体,圆柱体三个对象,利用抽象类将实现几何体面积、体积的计算函数和有关数据进行声明,此处便是纯虚函数的应用。接着又定义了一个CountFactory类此类便是将其他类进行整合处理并向消费类提供接口的关键类。从程序62行到程序100行可以看到这个工厂类的实现,是根据情况进行调用相关类对象的。这其中有一点是值得一提的,在满足情况时调用对应的类创建对象,但是当这个工厂类中的此成员函数调用完之后此临时创建的对象就会被析构掉,如此就出现程序运行错误。我的解决方法是:将此被创建的对象命名为static型的保证此对象的生存期不局限在工厂类的成员函数中。
以上是对于生产类来说的,而对于消费类来说借口也是他定义的,那么他只用根据自己预先设想好的方法去编写函数即可。以上便是我对简单工厂模式的理解。

原创粉丝点击