• 「设计模式」简单工厂模式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

  • 相关阅读:
    一天一道算法题---6.8--数学题
    TOJ----1037---最大独立集
    一天一道算法题---6.6---排列递推(我不会)
    一天一道算法题---6.4--中途相遇法
    一天一道算法题--6.5--数学题
    夜太美---酒不醉--人自醉
    SSH组合之Spring3整合Hibernate4(一)
    Hibernater入门
    Java微信公众平台进入开发模式
    新浪sae平台进行数据库的连接
  • 原文地址:https://www.cnblogs.com/awakenjoys/p/Factory.html
Copyright © 2020-2023  润新知