大话设计模式C++版

简单工厂模式应该是所有设计模式中最简单,也最基础的一种模式,以下是一个简单的采用工厂模式写一个加减法的计算器。

1、抽象接口类——依赖倒转原则(高层和底层都要依赖于抽象,针对接口编程)

class IOperation{public:IOperation() : m_nNuml(0), m_nNumr(0) {}virtual~IOperation() {}virtualvoidSetNum(int nNuml = 0, int nNumr = 0){m_nNuml = nNuml;m_nNumr = nNumr;}virtualintCalculateResult() = 0;protected:intm_nNuml, m_nNumr;};

注:m_nNuml, m_nNumr申明为protected,是为了让继承类中能够使用,同时又保持其访问的私有性,这和C#是不一样的地方

2、接口实现对象类——加法、减法类(乘除法就省略了,类似)

class COperation_Add : public IOperation{public:intCalculateResult(){returnm_nNuml + m_nNumr;}};class COperation_Dec : public IOperation{public:intCalculateResult(){returnm_nNuml – m_nNumr;}};

3、工厂类——生成抽象对象<span style="font-size:14px;">class CClassFactory{public:CClassFactory() {}~CClassFactory() {}IOperation*CreateObject(char cOperation){IOperation*poCOperation = NULL;switch (cOperation){case '+':{poCOperation = new COperation_Add();break;}case '-':{poCOperation = newCOperation_Dec();break;}break;}returnpoCOperation;}};4、使用工厂生产对象voidTest(){CClassFactoryoCClassFactory;IOperation*poIOperation = NULL;poIOperation = oCClassFactory.CreateObject('+');if (poIOperation){poIOperation->SetNum(2, 3);printf("2 + 3 = %d\n", poIOperation->CalculateResult());delete poIOperation;}}简单工厂模式的好处在于将具体对象的产生过程进行了封装,用户不需要关系这个对象怎么来的,只需要just use it,同时有了对象工厂这个中间人,,可以根据需要替换掉相应的对象,使用更加灵活。但简单工厂模式中,判断该产生何种对象时,采用了switch结构,如果需要改动或者增减对象时,需要改动switch结构的代码,不符合开放—封闭原则,即函数、类不可以修改,只能扩展。如何解决此问题,请看下回分解(大话设计模式C++版——表驱动法改造简单工厂模式)

学会技能是小智慧,学会做人是大智慧。

大话设计模式C++版

相关文章:

你感兴趣的文章:

标签云: