工厂方法模式是以简单工厂模式为基础的,如果未了解简单工厂模式的同学可先浏览《大话设计模式C++版——简单工厂模式》。在简单工厂模式中,提到过简单工厂模式的缺陷,即违背了开发—封闭原则,其主要原因是由于switch的判断结构的使用,使修改或添加新的对象时需要改动简单工厂类的代码,不符合开放—封闭原则,那么工厂方法模式会在那方面有所改进呢?我们仍以简单工厂模式中加减法计算器为例。
1、保持简单工厂模式的 IOperation 接口和实现对象(COperation_Add 和 COperation_Dec)
class IOperation { public: IOperation() : m_nNuml(0), m_nNumr(0) {} virtual ~IOperation() {} virtual void SetNum(int nNuml = 0, int nNumr = 0) { m_nNuml = nNuml; m_nNumr = nNumr; } virtual int CalculateResult() = 0; protected: int m_nNuml, m_nNumr; }; class COperation_Add : public IOperation { public: int CalculateResult() { return m_nNuml + m_nNumr; } }; class COperation_Dec : public IOperation { public: int CalculateResult() { return m_nNuml - m_nNumr; } };