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;
    }
  • 相关阅读:
    ios实现程序切入后台,实现后台任务 (转自)
    iOS 设置页面的代码编写
    IOS 关于扬声器和听话筒的设置 ----自己试验过的,可以达到扩音器和听筒播放的效果
    转载自@机智的新手:使用Auto Layout中的VFL(Visual format language)--代码实现自动布局
    web前端基础知识-(六)web框架
    web前端基础知识-(五)jQuery
    web前端基础知识-(四)DOM
    web前端基础知识-(三)JavaScript基本操作
    web前端基础知识-(二)CSS基本操作
    web前端基础知识-(一)html基本操作
  • 原文地址:https://www.cnblogs.com/lsgxeva/p/7774114.html
Copyright © 2011-2022 走看看