设计模式中简单工厂模式C++实现

最近读程杰的<大话设计模式>, 但是代码是c#版的, 于是参考书中和网上的若干代码. 编写设计模式中简单工厂模式C++实现

 

简单工厂模式理论总结如下:

 

1. 实质 -- 主要用于创建对象.

 

将一个具体类的实例化交给一个静态工厂方法来执行。

简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。

核心思想是用一个工厂来根据输入的条件产生不同的类,然后根据不同类的virtual函数得到不同的结果。

 

2. 优缺点

 

优点:

1)  职责单一,实现简单,且实现了客户端代码与具体实现的解耦.

是减少代码耦合的一种设计方式,更易于维护.

2)  新添加类时,不会影响以前的系统代码.

 

缺点:

客户端必须要知道基类和工厂类,耦合性差.

 

3. 应用场合

核心提示: 主要用于创建对象.适用于不同情况创建不同的类时.

 

应用场合:

1)  工厂类负责创建的对象比较少

2)  客户只知道传入工厂类的参数,对于如何创建对象(逻辑)不关心;

3)  由于简单工厂很容易违反高内聚责任分配原则,因此一般只在很简单的情况下应用。

  

4. 模式中的角色

1) 工厂类(Simple Factory): 只包含了创建具体类的静态方法。

2) 抽象产品(Product):定义简单工厂中要返回的产品。

3) 具体产品(ConcreteProduct):具体产品。

 

5 代码部分

.h部分


// 抽象产品

class Operation
{
public:
 virtual double GetResult() = 0;

public:
 double m_FirstNum;
 double m_SecondNum;
 //double m_Result;
};

// 具体产品 -- 加法
class AddOperation : public Operation
{
 double GetResult()
 {
  return (m_FirstNum + m_SecondNum);
 }

};

// 具体产品 -- 减法
class SubOperation : public Operation
{
 double GetResult()
 {
  return (m_FirstNum - m_SecondNum);
 }

};
// 简单工厂
class CCaculOperation
{
public:
 static Operation* CreateProduct(char cOper);
};

Operation* CCaculOperation::CreateProduct(char cOper)
{
 Operation *oper;

 switch (cOper)
 {
  case '+':
   oper = new AddOperation();
   break;
  case '-':
   oper = new SubOperation();
   break;
  default:
   oper = new AddOperation();
   break;
 }

 return oper;
}

 

.cpp部分

#include "SimpleFactory.h"
#include <iostream>
using namespace std;

int main()
{
 int num1;
 int num2;
 char cOper;

 cin>>num1;
 cin>>num2;
 cin>>cOper;

 Operation *oper = CCaculOperation::CreateProduct(cOper);

 oper->m_FirstNum = num1;
 oper->m_SecondNum = num2;

 cout<<oper->GetResult()<<endl;

 return 0;
}

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值