简单工程模式(c++描述)

    最近才开始看设计模式,想想这玩意本来应该在大学的时候就应该了解的东西,到现在了竟然只了解到皮毛,惭愧啊~~~

  

    话说这是从一个计算器的案例来引发的思考,现在我想做一个计算器,包含加减乘除运算;

  

    考虑下,设计这个类,一般的设想是直接设计一个运算类,里面包含加减乘除运算的接口,然后就可以完工了。

 

    可是,真的是这样吗?如果我们想再增加一个乘方运算,怎么办呢?直接在运算类里面写?这显然违背了设计的开闭原则。而且,再想一

 

想,这样设计的类,耦合度想到高,如果要更改某一个运算方式,就必须再次打开运算类,这样做,估计老板要发怒的了。

 

   于是,我们考虑一种简单工程模式,把具体的类和实现部分分开,结构图如下:

简单工厂模式

 

  这样做,如果我们要增加新的运算,只需要增加新的运算类,然后才工厂中注册新的产品就可以了;

 

代码实现:

//运算基类
#include <iostream>

#ifndef OPERATION
#define OPERATION

class Operation
{
public:
    virtual double GetResult(double numA, double numB);
  
protected:

private:
};

#endif

 

#include "Operation.h"
//加法类
#ifndef OPERATIONADD
#define OPERATIONADD

class OperationAdd:public Operation
{
public :    

         double GetResult(double numA, double numB);

protected:

private:

};

#endif

 

//工厂

#ifndef SIMPLEFACTORY
#define SIMPLEFACTORY

class SimpleFactory
{
public:Operation *CreatOperation(char operate);

};

#endif

 

//工厂的实现

Operation *SimpleFactory::CreatOperation(char operate)
{
 Operation *oper = NULL; 
 switch (operate)
 {
 case '+':oper = new OperationAdd;
  break;
 case '-':oper = new OperationSub;
  break;
 case '*':oper = new OperationMul;
  break;
 case '/':oper = new OperationDiv;
  break; 
 default:oper = new OperationAdd;
  break;
 } 
 return oper;

}

 

客户端

int main(void)
{
 double numA = 20;
 double numB = 13;

 Operation *oper = NULL;
 SimpleFactory simFac;

 oper = simFac.CreatOperation('/');

 double result = oper->GetResult(numA, numB);

 std::cout<<"numA / numB 's result is:"<<result<<std::endl;

 system("pause");

 return 0;
}

 

说明:

/*
*优点:符合面向对象4大原则:可维护,可复用,可扩展,灵活性高,耦合度低
*缺点:如果要增加新的产品,必须对工厂进行修改,这违背了软件设计的开闭原则    
*/

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值