学习笔记-7

关于简单工厂模式

在openFOAM中大量应用RTS机制,为了深入了解该机制,首先对简单工厂模式进行简单介绍。该模式主要应用类的静态函数不需要创建实例即可进行引用的这一特性,根据不同的参数从而实例化不同的类。

ddtScheme.h头文件

#ifndef DDTSCHEME_H_
#define DDTSCHEME_H_
#include <string>
#include <memory>
class ddtScheme 
{
    public:
        ddtScheme();
};
class EulerDdtScheme:public ddtScheme
{ 
    public:
        EulerDdtScheme();
};
class backwardDdtScheme:public ddtScheme
{
    public:
        backwardDdtScheme();
};
class steadyScheme:public ddtScheme
{
    public:
        steadyScheme();
};
class ddtSchemeFactory {
    public:
        ddtSchemeFactory();
    public:
        static std::shared_ptr<ddtScheme> createDdtScheme(const std::string &type);//这里之所以要定义为静态成员函数,其目的在于不需要实例化就可以调用该函数;
        //它跟类的实例无关,只跟类有关,不需要this指针。
};
#endif

ddtScheme.cpp

#include <iostream>
#include <string>
#include "ddtScheme.H"
ddtScheme::ddtScheme(){};
EulerDdtScheme::EulerDdtScheme()
{
   std::cout << "Construct Euler scheme." << std::endl;
};

backwardDdtScheme::backwardDdtScheme()
{
     std::cout << "Construct backward scheme." << std::endl; 
};
steadyScheme::steadyScheme()
{
     std::cout << "Construct steady scheme." << std::endl; 
};
ddtSchemeFactory::ddtSchemeFactory(){};

std::shared_ptr<ddtScheme> ddtSchemeFactory::createDdtScheme(const std::string& type)
{
        if (type == "Euler")
        {
            return std::shared_ptr<ddtScheme>(new EulerDdtScheme);
        }
        else if (type == "backward")
        {
            return std::shared_ptr<ddtScheme>(new backwardDdtScheme);
        }
        else if (type == "steady")
        {
            return std::shared_ptr<ddtScheme>(new steadyScheme);
        }
        else
        {
            std::cout << "Unknown type: " << type << std::endl;
            return nullptr;
        }
};

主函数

#include "ddtScheme.H"
#include <iostream>
#include <string>

int main(int argc, char *argv[])
{
    std::shared_ptr<ddtScheme> euler = ddtSchemeFactory::createDdtScheme("Euler");
    std::shared_ptr<ddtScheme> steady = ddtSchemeFactory::createDdtScheme("steady");
    std::shared_ptr<ddtScheme> banana = ddtSchemeFactory::createDdtScheme("banana");
    getchar();
    return 0;
}

在cmd中输入g++ Main.cpp ddtScheme.cpp编译后会生成a.exe文件,在cmd中执行该文件即可。

本文总阅读量 ⤧  Next post openfoam学习笔记-9 ⤧  Previous post C++学习笔记-多态性