zoukankan      html  css  js  c++  java
  • 「设计模式」简单工厂模式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

  • 相关阅读:
    mqtt 服务器与客户端通讯
    MQTT--单片机实现即时通信
    source insight 如何建工程--以及快捷方式查找调用函数方法
    在联网时,两台linux服务器传输文件方法
    字符串截取函数-c语言
    strcpy(),strcat()的用法
    如何将红色区域数据调用解密函数直接打印到输出控制台(例如:crt控制台)
    如何把apdu[decode_len]打印出来
    SecureCRT中文乱码解决已设置UTF-8
    RobotFrameWork(五)控制流之if语句——Run Keyword If
  • 原文地址:https://www.cnblogs.com/awakenjoys/p/Factory.html
Copyright © 2011-2022 走看看