工厂模式

原创 2017年10月06日 21:22:55

1.简单工厂模式:(简单工厂模式不属于23种设计模式)
结构图:
这里写图片描述
优点:统一接口
缺点:违背了“开闭原则”
代码实现:
生产类:

class Product{
public:
    virtual void getName() = 0;
};
class ProductA:public Product{
public:
    void getName(){
        cout << "A产品" << endl;
    }
};
class ProductB:public Product{
public:
    void getName(){
        cout << "B产品" << endl;
    }
};
class ProductC:public Product{
public:
    void getName(){
        cout << "C产品" << endl;
    }
};

工厂类:

class Factory{
public:
    Product* send(string str){
        if (str == "A"){
            return new ProductA;
        }
        else if (str == "B"){
            return new ProductB;
        }
        else if (str == "C"){
            return new ProductC;
        }
        else{
            return NULL;
        }
    }

};

测试代码:

int main(void){
    Factory *fas= new Factory();
    Product *pc = fas->send("A");
    pc->getName();
    delete fas, pc;
    system("pause");
    return 0;
}

调试结果:
这里写图片描述
简单工厂:
如果想在增加一种产品,那么就要更改工厂类中的代码。为了解决这个问题,将工厂类抽象,用那种产品就new那个工厂。
结构图:
这里写图片描述
代码实现:
生产类不变。
工厂类:

class Factory{
public:
    virtual Product* send() = 0;
};
class FactoryA :public Factory{
    Product* send(){
        return new ProductA();
    }
};
class FactoryB :public Factory{
    Product* send(){
        return new ProductB;
    }
};
class FactoryC :public Factory{
    Product* send(){
        return new ProductC();
    }
};

测试代码:

int main(void){
    Factory *fas= new FactoryB();
    Product *pb = fas->send();
    pb->productDo();
    delete fas, pb;
    system("pause");
    return 0;
}

调试结果:
这里写图片描述
缺点:
每个子工厂的功能过于单一。
抽象工厂模式:
工厂模式只能生产一个产品,抽象工厂可以生产一个产品族。
结构图:
这里写图片描述
水果类:

class Fruit{
public:
    virtual void getName()=0;
};
class SouthApple :public Fruit{
public:
    void getName(){
        cout << "SouthApple" << endl;
    }
};
class SouthPear :public Fruit{
public:
    void getName(){
        cout << "SouthPear" << endl;
    }
};
class NorthApple :public Fruit{
public:
    void getName(){
        cout << "NorthApple" << endl;
    }
};
class NorthPear :public Fruit{
public:
    void getName(){
        cout << "NorthPear"<<endl;
    }
};

工厂:

class Factory{
    virtual Fruit* CreatApple() = 0;
    virtual Fruit* CreatPear() = 0;
};
class FactoryNorth :public Factory{
public:
    Fruit* CreatApple(){
        return new NorthApple();
    }
    Fruit* CreatPear(){
        return new NorthPear();
    }
};
class FactorySouth :public Factory{
public:
    Fruit* CreatApple(){
        return new SouthApple();
    }
    Fruit* CreatPear(){
        return new SouthPear;
    }
};

测试代码:

int main(void){
    FactoryNorth *fac = new FactoryNorth();
    Fruit *apple = fac->CreatApple();
    apple->getName();
    Fruit *pear = fac->CreatPear();
    pear->getName();
    delete apple, pear,fac;
    system("pause");
    return 0;
}

调试结果:
这里写图片描述

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xiao_ren_wu_/article/details/78167205

关于工厂模式的作用。为什么要用工厂模式?

关于工厂模式的作用。为什么要用工厂模式?
  • kocscs123
  • kocscs123
  • 2016-11-20 19:56:15
  • 3013

为什么工厂模式是华而不实的—浅谈工厂模式的利与弊

转载请注明出处:http://blog.csdn.net/singwhatiwanna/article/details/17428923说明:博主虚心接受大家的抨击,批评,指正前言我一直想介绍下工厂模...
  • singwhatiwanna
  • singwhatiwanna
  • 2013-12-20 01:26:25
  • 14919

工厂模式及在项目中的应用

工厂模式分为简单工厂、工厂方法模式和抽象工厂模式。简单工厂顾名思义是最简单的,从一个工厂获取所需的产品类似于factory.getProduct1();或factory.getProduct2(),最...
  • empyan
  • empyan
  • 2017-02-06 21:20:16
  • 4540

iOS工厂模式的实质性总结

最近在公司搞分享活动,索性就分享了工厂模式这个看似大家都不重视的设计模式。实际上开发过程中用到的场景不少啊。 经过初步的了解和认识工厂之后,再去你们公司项目工程里面看看代码,肯定有不少之处用到了工厂模...
  • qq_25475307
  • qq_25475307
  • 2017-08-17 18:11:43
  • 464

面试问题,多态,工厂模式

具体说,多态就是基类的指针在调用虚函数成员的时候,运行时系统会根据指针实际指向的对象调用恰当的成员函数。 当一个方法在不同的环境中有不同的实现时,可以使用多态,抽象出一个接口,子类有不同的实现。 ...
  • digaoyang
  • digaoyang
  • 2014-12-03 10:13:19
  • 1438

三种工厂模式区别总结

工厂模式分为三种:简单工厂、工厂模式和抽象工厂模式。三者之间存在哪些异同呢?先分别看看各个模式的特点 一、     简单工厂模式: 实现了算法和界面的分离,也就是将业务逻辑和界面逻辑分开了,降低了耦...
  • lingfengtengfei
  • lingfengtengfei
  • 2013-10-07 10:40:15
  • 29906

java中的工厂模式是什么,请举例说明

工厂模式就是在接口和子类之间加入了一个过渡端,通过此过渡端获得接口的实例化对象,这个过渡端也就是所谓的工厂类。这样以后如果再有程序子类要扩充,直接修改工厂类客户端就可以根据标记得到相应的实例,增加了程...
  • maguanghui_2012
  • maguanghui_2012
  • 2015-08-02 22:11:42
  • 1836

java设计模式---浅谈2种工厂模式和单例模式

1、 工厂模式  。比如有一个统一接口  A   ,这个A接口是一个标准  。如果有类  B  和 C   那么 BC必须实现A接口  。 我们在以往的 方法生成这种对象的时候   A  b=new...
  • yue7603835
  • yue7603835
  • 2012-04-13 23:08:12
  • 12700

三种工厂模式 和 策略模式 对比

一、引子 话说十年前,有一个爆发户,他家有三辆汽车(Benz(奔驰)、Bmw(宝马)、Audi(奥迪)),还雇了司机为他开车。不过,爆发户坐车时总是这样:上Benz车后跟司机说“开奔驰车!”,坐上B...
  • u014600626
  • u014600626
  • 2016-08-05 17:18:06
  • 4100

设计模式(一) 工厂模式 五种写法总结

转载请标明出处: http://blog.csdn.net/zxt0601/article/details/52703280本文出自:【张旭童的博客】系列开篇瞎BB设计模式相关的文章学习与总结,一...
  • zxt0601
  • zxt0601
  • 2016-10-12 16:47:11
  • 32735
收藏助手
不良信息举报
您举报文章:工厂模式
举报原因:
原因补充:

(最多只允许输入30个字)