GoF的设计模式一经推出,就引起了各路诸侯的严重关注。从JAVA到C#再到C++,甚至连面向过程为主的C都想染指一番。今天,就从C#出发,推导出C++的代码,并用一个C++的ATM模拟程序来实作(这个词好像是从侯捷先生那学来的,如果我记错了,希望他不会怪我,呵呵)。
我们首先看看简单工厂来描述一个四则运算的UML类图。
呵呵,发现在Ubuntu下使用Firefox上传图片会失败。看来在中国,使用Linux确实面临不少障碍!只能切换到Window Xp下再试一下了。后来发现原来是我把图片格式搞错了。CSDN支持的格式为gif,jpg,png,我开始传的是bmp。现在改为jpg就好了,错怪它了。
从图中信息可知,运算类为一个抽象基类,声明了一个基本接口,和两个运算参数,这里为double类型。其实可以用模板方式来扩展该基类,这样就不仅仅处理double类型了。C++代码如下:
下面是各运算子类:
我们首先看看简单工厂来描述一个四则运算的UML类图。
呵呵,发现在Ubuntu下使用Firefox上传图片会失败。看来在中国,使用Linux确实面临不少障碍!只能切换到Window Xp下再试一下了。后来发现原来是我把图片格式搞错了。CSDN支持的格式为gif,jpg,png,我开始传的是bmp。现在改为jpg就好了,错怪它了。
从图中信息可知,运算类为一个抽象基类,声明了一个基本接口,和两个运算参数,这里为double类型。其实可以用模板方式来扩展该基类,这样就不仅仅处理double类型了。C++代码如下:
- //Operation.h
- /** /brief COperator
- * Description:运算基类
- */
- template<typename T>
- class COperator
- {
- private:
- T NumberA; /*!< 第一个运算变量 */
- T NumberB; /*!< 第二个运算变量,处理两个相同类型的运算 */
- public:
- COperator();
- virtual ~COperator() = 0; /*!< 没什么好说的,必须的 */
- T GetResult() = 0; /*!< 抽象类接口 */
- void SetNumberA(T t);
- void SetNumberB(T t);
- };
- // OperationChild.h
- #include "Operation.h"
- /** /brief COperatorAdd
- * Description:加法运算子类
- */
- template<typename T>
- class COperatorAdd : public COperator
- {
- public:
- COperatorAdd();
- ~COperatorAdd();
- virtual T GetResult(); /*!< 在cpp文件中实现,此略 */
- };
- /** /brief COperatorSub
- * Description:减法运算子类
- */
- template<typename T>
- class COperatorSub : public COperator
- {
- public:
- COperatorSub();
- ~COperatorSub();
- virtual T GetResult(); /*!< 在cpp文件中实现,此略