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

    创建型模式 工厂模式

    /**
     * 创建型模式 工厂模式
     * 工厂方法模式同样属于类的创建型模式又被称为多态工厂模式 。
     * 符合"开放-封闭"原则 通过添加代码的方式,不是通过修改代码的方式完成功能的增强。
     * 工厂方法模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。 
     * 核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工厂角色的情况下引进新的产品。
     *
     * 抽象工厂(Creator)角色  
     * 工厂方法模式的核心,任何工厂类都必须实现这个接口。 
     * 具体工厂( Concrete  Creator)角色  
     * 具体工厂类是抽象工厂的一个实现,负责实例化产品对象。 
     * 抽象(Product)角色  
     * 工厂方法模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。 
     * 具体产品(Concrete Product)角色   
     * 工厂方法模式所创建的具体实例对象
     *
     */
    
    
    #include <iostream>
    
    class Fruit
    {
    public:
        virtual void sayname() = 0;
        virtual ~Fruit() {}
    };
    
    class Banana: public Fruit
    {
    public:
        virtual void sayname() override
        {
            std::cout << "我是香蕉" << std::endl;
        }
    };
    
    class Pear: public Fruit
    {
    public:
        virtual void sayname() override
        {
            std::cout << "我是梨子" << std::endl;
        }
    };
    
    class AbFactory
    {
    public:
        virtual Fruit * CreateProduct() = 0;
        virtual ~AbFactory() {}
    };
    
    
    class BananaFactory: public AbFactory
    {
    public:
        virtual Fruit * CreateProduct() override
        {
            return new Banana;
        }
    };
    
    class PearFactory: public AbFactory
    {
    public:
        virtual Fruit * CreateProduct() override
        {
            return new Pear;
        }
    };
    
    void mytest()
    {
        AbFactory *factory = nullptr;
        Fruit *fruit = nullptr;
    
        factory = new BananaFactory();
        fruit = new Banana();
        fruit->sayname();
        delete factory;
        factory = nullptr;
        delete fruit;
        fruit = nullptr;
    
        factory = new PearFactory();
        fruit = new Pear();
        fruit->sayname();
        delete factory;
        factory = nullptr;
        delete fruit;
        fruit = nullptr;
    
        return;
    }
    
    
    int main()
    {
        mytest();
    
        system("pause");
        return 0;
    }
  • 相关阅读:
    Hadoop学习笔记——配置文件
    Hive学习笔记——SerDe
    MapReduce中的OutputFormat
    Nginx 转发时的一个坑,运维居然让我背锅!!
    教你用 Netty 实现一个简单的 RPC!
    完整的支付系统整体架构!
    String 拼接一定会走 StringBuilder?
    腾讯牛逼!终于开源了自家的 Tencent JDK——Kona!!
    Java 数组转 List 的 3 种方式,哪种性能最牛?
    Spring Boot 2.4.0 发布,配置文件重大调整,不要乱升级!!
  • 原文地址:https://www.cnblogs.com/lsgxeva/p/7774114.html
Copyright © 2011-2022 走看看