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

    工厂模式:

    (摘自菜鸟教程

    意图:定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。

    主要解决:主要解决接口选择的问题。

    何时使用:我们明确地计划不同条件下创建不同实例时。

    如何解决:让其子类实现工厂接口,返回的也是一个抽象的产品。

    关键代码:创建过程在其子类执行。

    应用实例: 1、您需要一辆汽车,可以直接从工厂里面提货,而不用去管这辆汽车是怎么做出来的,以及这个汽车里面的具体实现。 2、Hibernate 换数据库只需换方言和驱动就可以。

    class factory {
    public:
        virtual void draw()  = 0;
    };
    
    class Rect : public factory 
    {
     public:
         void draw() { std::cout << "生成一个矩形" << std::endl; }
    
    };
    class Squ : public factory
    {
    public:
        void draw() { std::cout << "生成一个正方形" << std::endl; }
    
    };
    class Circ : public factory
    {
    public:
        void draw() { std::cout << "生成一个圆" << std::endl; }
    
    };
    
    class ShapFactory 
    {
    public:
        ShapFactory() {T = NULL;}
        ~ShapFactory() { ReleaseFactouy(); }
        factory* GetFactory(std::string strShap)
        {
            if (strShap.compare("rectangle") == 0)
            {
                T = new Rect;
            }        
            if (strShap.compare("square") == 0)
            {
                T = new Squ;
            }
            if (strShap.compare("circle") == 0)
            {
                T = new Circ;
            }
            return T;
        }
        void ReleaseFactouy() 
        {
            if (T != NULL)
            {
                delete T;
            }
        }
    private:
        factory * T;
    };
    
    int main()
    {
        ShapFactory* AFactory = new ShapFactory;
        factory* fac01 = AFactory->GetFactory("rectangle");
        fac01->draw();    //生成一个矩形
    
        factory* fac02 = AFactory->GetFactory("square");
        fac02->draw();    //生成一个正方形
    
        factory* fac03 = AFactory->GetFactory("circle");
        fac03->draw();    //生成一个圆
        delete AFactory;
        return 0;
    }
  • 相关阅读:
    cocos2d-x3.0 PageView
    mysql 安装配置及经常使用操作
    Android自己定义组件系列【6】——进阶实践(3)
    hdu 4300 Clairewd’s message(具体解释,扩展KMP)
    VS&quot;后生成事件&quot; 菜单的使用
    CUDA 实现JPEG图像解码为RGB数据
    Hibernate操作Blob数据
    android清除缓存为什么总是存在12k?
    JSP入门
    Linux字符设备驱动结构(一)--cdev结构体、设备号相关知识机械【转】
  • 原文地址:https://www.cnblogs.com/gardenofhu/p/8482045.html
Copyright © 2011-2022 走看看