简单工厂设计模式是一种基础简单而常用的设计模式,对理解封装、继承和多态特性有非常大的帮助。下面就来在Qt下实现简单工厂模式。
代码之路实现简单工厂至少需要四个类。其中最主要的两个类是工厂类和一个基类,另外的类都是这个基类的继承类。下面的例子中工厂类是factory,基类是BasicClass,两个继承类分别是ClassA和ClassB。
基类BasicClass的实现如下
继承类ClassA如下:
//classA.h#include "basicclass.h"class ClassA : public BasicClass{ Q_OBJECTpublic: ClassA(); void showClassName();};//classA.cpp#include "classa.h"ClassA::ClassA(){}void ClassA::showClassName(){ qDebug() << "这个类是ClassA!";}继承类classB如下:
//classB.h#include "basicclass.h"class ClassB : public BasicClass{ Q_OBJECTpublic: ClassB(); void showClassName();};//classB.cpp#include "classb.h"ClassB::ClassB(){}void ClassB::showClassName(){ qDebug() << "这个类是ClassB";}工厂类factory如下:
//factory.h#include "classa.h"#include "classb.h"enum ClassType{ ATYPE, BTYPE};class factory{public: factory(); static BasicClass* createNewClass(ClassType kind);};//factory.cpp#include "factory.h"factory::factory(){}//factory.cppBasicClass *factory::createNewClass(ClassType kind){ BasicClass* tmpClass = NULL; switch(kind) { case ATYPE: tmpClass = new ClassA(); break; case BTYPE: tmpClass = new ClassB(); break; default: break; } return tmpClass;}如何使用简单工厂模式:
//头文件#include "factory.h"//源文件BasicClass* m_classA = factory::createNewClass(ATYPE);BasicClass* m_classB = factory::createNewClass(BTYPE);m_classA->showClassName();m_classB->showClassName();//输出结果这个类是ClassA!这个类是ClassB UML类图 小结简单工厂模式就是工厂根据传入的条件不同返回不同的产品,如果要扩展产品则需修改工厂类,增加新产品即可;但如果要扩展已有产品的功能,则需要修改基类,违背了开放封闭原则,从而有了抽象工厂模式。复杂程度大大提升,这里就不做介绍了。