设计模式之 创建型模式 之 工厂模式

工厂模式:

(摘自菜鸟教程

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

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

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

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

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

应用实例: 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;
}
原文地址:https://www.cnblogs.com/gardenofhu/p/8482045.html