设计模式之简单工厂

       GoF的设计模式一经推出,就引起了各路诸侯的严重关注。从JAVA到C#再到C++,甚至连面向过程为主的C都想染指一番。今天,就从C#出发,推导出C++的代码,并用一个C++的ATM模拟程序来实作(这个词好像是从侯捷先生那学来的,如果我记错了,希望他不会怪我,呵呵)。
      我们首先看看简单工厂来描述一个四则运算的UML类图。

      呵呵,发现在Ubuntu下使用Firefox上传图片会失败。看来在中国,使用Linux确实面临不少障碍!只能切换到Window Xp下再试一下了。后来发现原来是我把图片格式搞错了。CSDN支持的格式为gif,jpg,png,我开始传的是bmp。现在改为jpg就好了,错怪它了。
      从图中信息可知,运算类为一个抽象基类,声明了一个基本接口,和两个运算参数,这里为double类型。其实可以用模板方式来扩展该基类,这样就不仅仅处理double类型了。C++代码如下:
  1. //Operation.h
  2. /** /brief COperator
  3.  * Description:运算基类
  4.  */
  5. template<typename T>
  6. class COperator
  7. {
  8. private:
  9.     T NumberA;    /*!< 第一个运算变量 */
  10.     T NumberB;    /*!< 第二个运算变量,处理两个相同类型的运算 */
  11. public:
  12.     COperator();
  13.     virtual ~COperator() = 0;    /*!< 没什么好说的,必须的 */
  14.     T GetResult() = 0;           /*!< 抽象类接口 */
  15.     void SetNumberA(T t);
  16.     void SetNumberB(T t);
  17. };
      下面是各运算子类:
  1. // OperationChild.h
  2. #include "Operation.h"
  3. /** /brief COperatorAdd
  4.  * Description:加法运算子类
  5.  */
  6. template<typename T>
  7. class COperatorAdd : public COperator
  8. {
  9. public:
  10.     COperatorAdd();
  11.     ~COperatorAdd();
  12.     virtual T GetResult();    /*!< 在cpp文件中实现,此略 */
  13. };
  14. /** /brief COperatorSub
  15.  * Description:减法运算子类
  16.  */
  17. template<typename T>
  18. class COperatorSub : public COperator
  19. {
  20. public:
  21.     COperatorSub();
  22.     ~COperatorSub();
  23.     virtual T GetResult();    /*!< 在cpp文件中实现,此略 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值