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;
    }
  • 相关阅读:
    利用单片机构成高精度PWM式12位D/A
    【转】FORMAT在DELPHI中的用法
    可定时温湿控制器
    用C#获取硬盘序列号,CPU序列号,网卡MAC地址
    Oracle笔记:查询表相关
    Oracle笔记:视图
    Oracle笔记:维护数据的完整性
    Oracle笔记:索引
    Oracle笔记:pl/sql例外处理
    Oracle笔记:逻辑备份与恢复
  • 原文地址:https://www.cnblogs.com/lsgxeva/p/7773995.html
Copyright © 2011-2022 走看看