设计模式(一) 简单工厂模式

来源:互联网 发布:最花钱的游戏知乎 编辑:程序博客网 时间:2024/05/17 02:54

对于工厂模式,具体上可以分为三类:

  • 简单工厂模式;
  • 工厂方法模式;
  • 抽象工厂模式。
对于上面的三种工厂模式,从上到下逐步抽象,并且更具一般性。简单工厂模式是应用于生产大量父类子类对象的方法,例如在一个界面中进行简单的加减乘除的操作,我们可以将加减乘除进行抽象,得到一个接口算数类,加减乘除分别实现这个接口类,利用多态性,在工厂类中进行统一的对象生产,从而有利于对象的管理。实际应用场景包括:
  • 在程序中,需要创建的对象很多,导致对象的new操作多且杂时,需要使用简单工厂模式;
  • 由于对象的创建过程是我们不需要去关心的,而我们注重的是对象的实际操作,所以,我们需要分离对象的创建和操作两部分,如此,方便后期的程序扩展和维护。
下面是简单工厂方法的简单模型:


上面的UML图表示:ProductA,ProductB,ProductC继承于Product,其中方法Show是public属性的,Factory类创造产品的方法CreateProduct依赖于ProductA,ProductB,ProductC。

简单的C++实现 模型如下:

#include<iostream>using namespace std;class Product {public:  virtual void show() =0;};class ProductA : public Product {public:    virtual  void show(){cout<<" I am A"<<endl;} };class ProductB : public Product {public:    virtual  void show(){cout<<" I am B"<<endl;} };class ProductC : public Product {public:    virtual  void show(){cout<<" I am C"<<endl;} };enum ProductType{TypeA, TypeB, TypeC};class Factory{public:Product * CreateProduct(ProductType type){Product *temp;switch(type){case TypeA:temp=new ProductA();break;case TypeB:temp=new ProductB();break;case TypeC:temp=new ProductC();break;default:return NULL;}return temp;}};int main(int argc, char *argv[]){Factory *ProductFactory = new Factory();Product *productObjA = ProductFactory->CreateProduct(TypeA);if (productObjA != NULL)productObjA->show();Product *productObjB = ProductFactory->CreateProduct(TypeB);if (productObjB != NULL)productObjB->show();Product *productObjC = ProductFactory->CreateProduct(TypeC);if (productObjC != NULL)productObjC->show();delete ProductFactory;ProductFactory = NULL;delete productObjA;productObjA = NULL;delete productObjB;productObjB = NULL;        delete productObjC;productObjC = NULL;return 0;}


0 0
原创粉丝点击