这个例子来自于《大话设计模式》的第一章。
简单工厂模式有3个基本的类:工厂类,抽象产品类,具体产品类。
使用抽象产品类作为一个基类,其余具体产品类继承它的基础数据,然后实现具体的功能。工厂类根据客户的需求来决定生成哪一个具体产品的对象。这种想法下抽象产品类应该设定为抽象类。这道题目虽然思路并不难,实现也不复杂。但是它却很好的体现了面向对象的设计思想。
说一说我对设计模式的理解,我们平时写的代码量如果小的话,根本用不到设计模式。比如你写一个排序算法,想用设计模式都 用不进去。但是对于大的项目工程,设计模式就特别重要。因为你看看设计模式的思想,实现代码的低耦合,使得代码可维护,可复用,可扩展,灵活性高。也就是说,设计模式使得你写的代码更clean,更有规则性。对于一个公司的项目来说,功能设计必须分开,因为不同的业务是不同的组实现的,而且可能人家组有自己的秘密呢(^_^)。这就是低耦合。而且加功能,改功能是很常见的需求,因为客户的需求总是变化的,这时候代码的可维护、可复用就很重要了。这就是设计模式的重要之处,让你写出更clean的代码。自己更容易维护和修改,你的同事也是。
1 //实现一个计算器控制台程序 2 #include<iostream> 3 //#include<cstdlib> 4 using namespace std; 5 //抽象产品类 6 class operate 7 { 8 protected: 9 double numberA; 10 double numberB; 11 public: 12 double getnumA() 13 { 14 return numberA; 15 } 16 double getnumB() 17 { 18 return numberB; 19 } 20 void setnumA(double initialA) 21 { 22 numberA=initialA; 23 } 24 void setnumB(double initialB) 25 { 26 numberB=initialB; 27 } 28 virtual double getresult() 29 { 30 double result=0; 31 return result; 32 } 33 }; 34 //具体产品类 35 class AddOperation:public operate 36 { 37 public: 38 //这里的public可以不写吗? 39 40 double getresult() 41 { 42 double result=0; 43 result=numberA+numberB; 44 return result; 45 } 46 }; 47 class SubOperation:public operate 48 { 49 public: 50 double getresult() 51 { 52 double result=0; 53 result=numberA-numberB; 54 return result; 55 } 56 }; 57 class MultipylOperation:public operate 58 { 59 public: 60 double getresult() 61 { 62 double result=0; 63 result=numberA*numberB; 64 return result; 65 } 66 }; 67 class DividOperation:public operate 68 { 69 public: 70 double getresult() 71 { 72 if(numberB==0) 73 { 74 cout<<"divisor can't be 0!"<<endl; 75 return 0; 76 } 77 double result=0; 78 result=numberA/numberB; 79 return result; 80 } 81 }; 82 //工厂类 83 class operationfactory 84 { 85 public: 86 operate* CreatOperation(char type) 87 { 88 operate* oper; 89 switch(type) 90 { 91 case '+': 92 oper=new AddOperation; 93 break; 94 case '-': 95 oper=new SubOperation; 96 break; 97 case '*': 98 oper=new MultipylOperation; 99 break;; 100 case '/': 101 oper=new DividOperation; 102 break; 103 } 104 return oper; 105 } 106 }; 107 //界面与输出 108 void calculater() 109 { 110 cout<<"enter ther formulate you want to calculate:"<<endl; 111 int numberA,numberB; 112 char symbol; 113 operate* oper=NULL; 114 cin>>numberA; 115 cin>>numberB; 116 cin>>symbol; 117 operationfactory op; 118 oper=op.CreatOperation(symbol); 119 //double re=0; 120 oper->setnumA(numberA); 121 oper->setnumB(numberB); 122 123 cout<<oper->getresult()<<endl; 124 if(oper!=NULL)//释放内存 125 { 126 delete oper; 127 oper=NULL; 128 } 129 system("pause"); 130 //cout<<re<<endl; 131 } 132 int main() 133 { 134 //cout<<"what can i do for you?" 135 //cout<<"enter a number:" 136 //cin>>numberA; 137 calculater(); 138 return 0; 139 }
我还给自己的代码写了一点坑,比如实现界面,实现一个多个项目的加减乘数的算法,留着以后慢慢填哈~