设计模式学习(七)————工厂方法模式

来源:互联网 发布:电脑版淘宝是哪个版本 编辑:程序博客网 时间:2024/05/22 07:01

使用一个例子是实现一个雷锋的例子,使用工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例延迟到其子类!

注意:它和简单工厂的区别是没有违背开放–封闭原则,简单工厂在工厂类里面通过逻辑实例话对应的类,违背了开放–封闭原则

雷锋和雷锋工厂的头文件是这样实现的:

#ifndef LEIFENG#define LEIFENG#include <QtDebug>class LeiFeng{public:    void Sweep()    {        qDebug() <<"扫地";    }    void Wash()    {        qDebug() <<"洗衣服";    }    void BuyRice()    {        qDebug() <<"买米";    }    virtual ~LeiFeng(){}};class Undergraduate final:public LeiFeng{};class Volunteer final:public LeiFeng{};#endif // LEIFENG#ifndef LEIFENGFACTORY#define LEIFENGFACTORY#include "leifeng.h"class LeiFenngInterface{public:    virtual LeiFeng *CreateLeiFeng() = 0;    virtual ~LeiFenngInterface(){}};class UndergraduateFactory final:public LeiFenngInterface{public:    LeiFeng *CreateLeiFeng() override    {        return new Undergraduate();    }};class VolunteerFactory final:public LeiFenngInterface{public:    LeiFeng *CreateLeiFeng() override    {        return new Volunteer();    }};#endif // LEIFENGFACTORY

然后就可以在主函数中这样测试工厂方法模式。

#include "leifengfactory.h"#include "leifeng.h"#include <QtDebug>int main(int argc , char *argv[]){    LeiFenngInterface *factory = new UndergraduateFactory();    LeiFeng *lf = factory->CreateLeiFeng();    lf->BuyRice();    lf->Sweep();    lf->Wash();    qDebug() <<"测试完毕!";    return 0;}

最后放上源码地址:https://github.com/Dongzhixiao/designMode_qt/tree/master/studyLeifeng_factoryMethod_pattern_8

0 0
原创粉丝点击