zoukankan      html  css  js  c++  java
  • 创建型模式 简单工厂模式

    创建型模式 简单工厂模式

    /**
     * 创建型模式 简单工厂模式
     * 简单工厂模式属于类的创建型模式,又叫做静态工厂方法模式。通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。
     *
     * 1.工厂(Creator)角色
     * 简单工厂模式的核心,它负责实现创建所有实例的内部逻辑。工厂类可以被外界直接调用,创建所需的产品对象。
     * 2.抽象(Product)角色
     * 简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。
     * 3.具体产品(Concrete Product)角色
     * 简单工厂模式所创建的具体实例对象
     *
     */
    
    //思想: 核心思想是用一个工厂,来根据输入的条件产生不同的类,然后根据不同类的virtual函数得到不同的结果。 
    //元素分析:  
    //抽象产品类:水果类  
    //具体的水果了:香蕉类、苹果类、梨子 
    //优点 适用于不同情况创建不同的类时 
    //缺点 客户端必须要知道基类和工厂类,耦合性差 增加一个产品,需要修改工厂类 
    
    
    #include <iostream>
    
    class Fruit
    {
    public:
        virtual void getFruit() = 0;
        virtual ~Fruit() {}
    };
    
    class Banana: public Fruit
    {
    public:
        virtual void getFruit() override
        {
            std::cout << "我是香蕉" << std::endl;
        }
    };
    
    class Pear: public Fruit
    {
    public:
        virtual void getFruit() override
        {
            std::cout << "我是梨子" << std::endl;
        }
    };
    
    class Factory
    {
    public:
        static Fruit * Create(char * name)
        {
            Fruit *tmp = nullptr;
            if (strcmp(name, "banana") == 0)
            {
                tmp = new Banana();
            } 
            else if (strcmp(name, "pear") == 0)
            {
                tmp = new Pear();
            }
            else
            {
                std::cout << "不支持" << std::endl;
                tmp = nullptr;
            }
            return tmp;
        }
    };
    
    void mytest()
    {
        Fruit *fruit = nullptr;
    
        fruit = Factory::Create("banana");
        if (fruit == nullptr)
        {
            std::cout << "创建香蕉失败" << std::endl;
        }
        fruit->getFruit();
        delete fruit;
        fruit = nullptr;
    
        fruit = Factory::Create("banana");
        if (fruit == nullptr)
        {
            std::cout << "创建梨子失败" << std::endl;
        }
        fruit->getFruit();
        delete fruit;
        fruit = nullptr;
    
        return;
    }
    
    
    int main()
    {
        mytest();
    
        system("pause");
        return 0;
    }
  • 相关阅读:
    SSL/TLS
    openssl数字证书常见格式 协议
    Jetty 与 Tomcat 的比较
    Spring Boot 邮件配置
    SSL与TLS的区别以及介绍
    pring Boot 与Spring Cloud版本对应
    iOS initWithFrame、initWithCoder、awakeFromNib的区别解析
    浅析iOS tableview的selectRowAtIndexPath选中无效(默认选中cell无效)
    iOS 多线程NSThread理解与场景示例
    iOS7 UIWebview加载进度条实现
  • 原文地址:https://www.cnblogs.com/lsgxeva/p/7773995.html
Copyright © 2011-2022 走看看