设计模式学习系列4 简单工厂模式

         从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。

1简单工厂模式结构图

clipboard[3]

简单工厂模式主要包含三部分

(1)工厂:负责根据客户需求创造需要的产品

(2)抽象产品:工厂生产产品的父类

(3)具体产品

2代码分析

 
 /*设计模式学习系列之简单工厂模式 
* 参考书籍《大话设计模式》 
* 简单工厂模式 的主要用途:根据需求创造需要的实例 
* 
* 例子逻辑:两个数的各种运算 
*/ 

 #include <iostream>
 using namespace std;
 
 enum OperatorType
 {
     ADD = 1,
     SUB,
     MUL,
     DIV,
 };
 //运算类基类 
 class Operation
 {
public:
    double numA ;
    double numB ;    
public:
     Operation():numA(0),numB(0){}
     Operation(const double& a , const double& b)
     {
        numA = a ;
        numB = b ;      
    }
    virtual ~Operation(){}    
    
    void SetNumA(const double& a)
    {
        numA = a ;
    }
    
    void SetNumB(const double& b)
    {
        numB = b ;
    }
    
    virtual double GetResult()
    {
        return 0.0f ;    
    }        
 };
 
 
 //加法类
 class OperationAdd: public Operation
 {
     double GetResult()
     {
        return numA + numB ;      
    }
 };
  
  //减法类
 class OperationSub: public Operation
 {
     double GetResult()
     {
        return numA - numB ;      
    }
 };
 
 
 //乘法 
 class OperationMul: public Operation
 {
     double GetResult()
     {
        return numA * numB ;      
    }
 };
 
 
  //除法 
 class OperationDiv: public Operation
 {
     double GetResult()
     {
         if(numB == 0)
        {
             cout << "除数不能为0 
" << endl ;
             return 0 ;     
         } 
         
        return numA / numB ;      
    }
 };
 
 
 //工厂类
 class Factory
 {
     public:
     static Operation* CreateOperation(const int& type)
    { 
        Operation * pOperation = 0 ;
        //c++ Switch判断语句中只允许整形和枚举类型,即integer type:char,short,int,long,
        //不建议使用float类型以及string类型 
         switch(type)     
         {
             case ADD:
             {
                 pOperation = new OperationAdd ;    
             }
             break ;
             case SUB:
             {
                 pOperation = new OperationSub ;    
             }
             break ;
             case MUL:
             {
                 pOperation = new OperationMul ;    
             }
             break ;     
             case DIV:
             {
                 pOperation = new OperationDiv ;    
             }
             break ;    
            default:
            break;

        }
        
        return pOperation ;
     }    
 };
  //===============================
  
  #include "factory_sm.h"
  
  
  int main()
  {
        Operation *pOpe = NULL ;
        
        pOpe = Factory::CreateOperation(ADD);
        pOpe->SetNumA(10);
        pOpe->SetNumB(10);
        
        cout << pOpe->GetResult() << endl ;
    delete pOpe ; //工厂中创建了,但没释放,这是个问题 }

注意的问题:

(1)//c++ Switch判断语句中只允许整形和枚举类型,即integer type:char,short,int,long, //不建议使用float类型以及string类型

(2)上面方法中 创建类的释放是个问题,因为工厂类没有做到自动释放,需要在代码中主动释放,不是很好,不知道由什么好的方法

细雨淅淅 标签:
原文地址:https://www.cnblogs.com/zsb517/p/3409600.html