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;
    }
  • 相关阅读:
    树的基本概念
    bean的生命周期
    bean的创建过程--doCreateBean
    bean的创建过程--doGetBean
    SpringBoot自动装配解析
    [论文理解] Good Semi-supervised Learning That Requires a Bad GAN
    Ubuntu 环境安装 opencv 3.2 步骤和问题记录
    Linux 环境使用 lsof 命令查询端口占用
    Ubuntu 安装不同版本的 gcc/g++ 编译器
    [持续更新] 安全能力成长计划
  • 原文地址:https://www.cnblogs.com/lsgxeva/p/7774114.html
Copyright © 2011-2022 走看看