c++工厂模式

简单写了一个工厂模式
在这种模式下,有新增的类时,FileAccessFasctory.h 和FileWork,cpp这两个文件是稳定的,不需要修改,只需要修改FileAccess.h和FileAccess.cpp,或者新增文件,这样就在业务逻辑中隔离变化;同时也可以实现增量编译,也不会影响业务代码的单元测试。

FileAccessFasctory.h

#ifndef _FILE_ACCESS_FACTORY_H
#define  _FILE_ACCESS_FACTORY_H
class IfileAccess{
public:
    virtual void open() = 0;
    virtual void read() = 0;
    //....
    virtual ~IfileAccess(){}
};

class IfileAccessFactory{
public:
    virtual IfileAccess* createFileAccess()= 0;
    virtual ~IfileAccessFactory(){}
};
#endif

FileWork,cpp

#include "FileAccess.h"

class  fileWork{
private:
    IfileAccessFactory *fileAccessFactory;
public:
    fileWork(IfileAccessFactory *fileAccessFactory){
        this->fileAccessFactory = fileAccessFactory;
    }

    void doWork(){
        IfileAccess * fileAccess = fileAccessFactory->createFileAccess();
        fileAccess->open();
        fileAccess->read();
    }
};

FileAccess.h

#ifndef _FILE_ACCESS_H
#define _FILE_ACCESS_H
#include "FileAccessFactory.h"
using  namespace std;


class textFileAccess : public IfileAccess{
public:
    virtual void open() override;
    virtual void read() override;
};

class pictureFileAccess : public IfileAccess{
public:
    virtual void open() override;
    virtual void read() override;
};

class videoFileAccess : public IfileAccess{
public:
    virtual void open() override;
    virtual void read() override;
};

class audioFileAccess : public IfileAccess{
public:
    virtual void open() override;
    virtual void read() override;
};

class textFileAccessFactory : public IfileAccessFactory{
public:
    virtual IfileAccess* createFileAccess()override;
};

class pictureFileAccessFactory : public IfileAccessFactory{
public:
    virtual IfileAccess* createFileAccess()override;
};

class videoFileAccessFactory : public IfileAccessFactory{
public:
    virtual IfileAccess* createFileAccess()override;
};

class audioFileAccessFactory : public IfileAccessFactory{
public:
    virtual IfileAccess* createFileAccess()override;
};

#endif


FileAccess.cpp

#include "FileAccess.h"
#include <iostream>

using namespace std;


void textFileAccess::open(){
    cout<<"open text file"<<endl;
}
void textFileAccess::read(){
    cout<<"read text file"<<endl;
}

void pictureFileAccess::open(){
    cout<<"open picture file"<<endl;
}
void pictureFileAccess::read(){
    cout<<"read picture file"<<endl;
}

void videoFileAccess::open(){
    cout<<"open video file"<<endl;
}
void videoFileAccess::read(){
    cout<<"read video file"<<endl;
}

void audioFileAccess::open(){
    cout<<"open audio file"<<endl;
}
void audioFileAccess::read(){
    cout<<"read audio file"<<endl;
}

IfileAccess*textFileAccessFactory::createFileAccess(){
    return new textFileAccess();
}

IfileAccess* pictureFileAccessFactory::createFileAccess(){
    return new pictureFileAccess();
}

IfileAccess* videoFileAccessFactory:: createFileAccess(){
    return new videoFileAccess();
}

IfileAccess* audioFileAccessFactory:: createFileAccess(){
    return new audioFileAccess();
}


main.cpp

#include "FileWork.cpp"
int main(){
    textFileAccessFactory *ptTextFileAccessFactory = new textFileAccessFactory();
    fileWork work(ptTextFileAccessFactory);
    work.doWork();

    pictureFileAccessFactory *ptPictureFileAccessFactory = new pictureFileAccessFactory();
    fileWork work1(ptPictureFileAccessFactory);
    work1.doWork();
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值