设计模式--工厂模式

来源:互联网 发布:中联选型软件 编辑:程序博客网 时间:2024/06/05 14:24

0x01 缘由

    继续学习相关设计模式,在编程中得到进一步利用,在目前的产品开发过程中,有很多地方都用到了工厂模式。

0x02 工厂模式

    “工厂”现实中的意义是按照某种工艺制造产品。那么为什么要使用工厂模式了?有什么好处?
    工厂模式是一个创建型的设计模式。他允许创造对象时不指定要创建的对象的具体类型(可能就某个参数)。本质上,工厂方法是构造函数的一般化。在C++中,构造函数有如下几个限制:
    没有返回值、命名限制、静态绑定创建、不允许虚构造函数。

0x03 应用场景

    创建类对象虽然可以使用new(底层也是通过反射创建对象的),但是在一些情况下使用工厂模式确实最合适的。
    情况一:如果一个对象拥有很多子类,那么创建该对象的子类使用工厂模式是最合适的,不但可以面向接口的编程,为维护以及开发带来方便。
    情况二:如果创建某个对象时需要进行许多额外的操作,如查询数据库然后将查询到的值赋予要创建的对象(单例初始化时使用比较多),或是需要许多额外的赋值等等。如果查看JDK源码中,会发现许多成员变量在对象构造时,通过工厂方法进行创建的。因为这些成员变量本身的创建也很复杂。不可能创建对象时,在该对象的构造方法里创建成员变量然后再赋值给该成员变量。而且使用工厂模式也提高了代码的重用性。

0x04 实现抽象工厂

 #include <iostream>    using namespace std;    //定义抽象类  class product1  {  public:      virtual void show() = 0;  };    //定义具体类  class product_A1 :public product1  {  public:      void show(){ cout << "product A1" << endl; }  };    class product_B1 :public product1  {  public:      void show(){ cout << "product B1" << endl; }  };    //定义抽象类  class product2  {  public:      virtual void show() = 0;  };    //定义具体类  class product_A2 :public product2  {  public:      void show(){ cout << "product A2" << endl; }  };    class product_B2 :public product2  {  public:      void show(){ cout << "product B2" << endl; }  };      class Factory  {  public:      virtual product1 *creat1() = 0;      virtual product2 *creat2() = 0;  };    class FactoryA  {  public:      product1 *creat1(){ return new product_A1(); }      product2 *creat2(){ return new product_A2(); }  };    class FactoryB  {  public:      product1 *creat1(){ return new product_B1(); }      product2 *creat2(){ return new product_B2(); }  };    int main()  {      FactoryA *factoryA = new FactoryA();      factoryA->creat1()->show();      factoryA->creat2()->show();        FactoryB *factoryB = new FactoryB();      factoryB->creat1()->show();      factoryB->creat2()->show();        return 0;  }  

0x05 总结

    使用好设计模式,会是编程更加有思路。