「设计模式」简单工厂模式C++版本

假如我们想用同一个接口要创建不同的对象,这里比喻成一个“青年工厂”吧,该工厂可以生产以下3种青年:

  1. 普通青年
  2. 文艺青年
  3. 2B青年(因C++不允许以数字开头命名标识符,我改成SB青年吧)

工厂模式有3种:

  1. 简单工厂(它的主要特点是需要在工厂类中做判断,从而创造相应的产品。当增加新的产品时,就需要修改工厂类)
  2. 抽象工厂
  3. 工厂方式

简单工厂设计模式实现,比如某大学可以毕业这3种青年,缺点是如果有个其他类的青年,需要再修改工厂方法。

// FactotyModel.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
#include <memory>


class YoungMan
{
public:
    YoungMan(){};
    virtual ~YoungMan(){};
    virtual void talk() = 0;
};

//普通青年
class butongyoungman : public YoungMan
{
public:
    butongyoungman(){};
    virtual ~butongyoungman(){};
    virtual void talk();
};
void butongyoungman::talk()
{
    std::cout << "I am a 普通青年" << std::endl;
}

//文艺青年
class weyiyoungman : public YoungMan
{
public:
    weyiyoungman(){};
    virtual ~weyiyoungman(){};
    virtual void talk();
};
void weyiyoungman::talk()
{
    std::cout << "I am a 文艺青年" << std::endl;
}

class SByoungman : public YoungMan
{
public:
    SByoungman(){};
    virtual ~SByoungman(){};
    virtual void talk();
};
void SByoungman::talk()
{
    std::cout << "I am a 二逼青年" << std::endl;
}

enum YOUNGTYPE
{
    kbutong = 0,
    kwenyi    = 1,
    k2b        = 2

};
//青年工厂
class youngmanFactory
{
public:
    youngmanFactory(){};
    ~youngmanFactory(){};
    static std::shared_ptr<YoungMan> CreateYoung(YOUNGTYPE ktype);

private:

};

std::shared_ptr<YoungMan> youngmanFactory::CreateYoung(YOUNGTYPE ktype)
{
    switch (ktype)
    {
    case kbutong:
        return    std::shared_ptr<YoungMan>(new butongyoungman);

    case kwenyi:
        return std::shared_ptr<YoungMan>(new weyiyoungman);

    case k2b:
        return std::shared_ptr<YoungMan>(new SByoungman);

    default:
        break;
    }
}


//main function 
int _tmain(int argc, _TCHAR* argv[])
{
    //YoungMan* btqn = youngmanFactory::CreateYoung(kbutong);
    std::shared_ptr<YoungMan> btqn = youngmanFactory::CreateYoung(kbutong);
    btqn->talk();

    std::shared_ptr<YoungMan> wyqn = youngmanFactory::CreateYoung(kwenyi);
    wyqn->talk();

    std::shared_ptr<YoungMan> sbqn = youngmanFactory::CreateYoung(k2b);
    sbqn->talk();

    system("Pause");
    return 0;
}

不恶搞了,其他2种工厂方法的实现可以参考:http://blog.csdn.net/wuzhekai1985/article/details/6660462

原文链接: https://www.cnblogs.com/awakenjoys/p/Factory.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/94396

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月10日 上午2:36
下一篇 2023年2月10日 上午2:36

相关推荐