设计模式入门1——简单工厂模式(OperationFactory)

来源:互联网 发布:为什么移动4g网络很慢 编辑:程序博客网 时间:2024/06/03 21:53

        从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。[From baike.baidu.com]


/*******************************************************///名称:简单工厂模式(OperationFactory)//时间:2014年4月4日11:49:21//作者:Lynch/*******************************************************/#pragma once#include"OperationFactory.h"int main(){int a,b;char oper;while(true){cout<<"Please input num1,num2,and operators(+,-,*,/,^)"<<endl;cin>>a>>b>>oper;OperationFactory *of=new OperationFactory();//创建操作符工厂模式Operation *op=of->CreateOperation(oper);//根据操作符创建对应的类op->setNum1(a);op->setNum2(b);cout<<op->getResult()<<endl;delete op;delete of;}return 0;}

#pragma once#include"Operation.h"//基类#include"AddOperation.h"//加法类#include"SubOperation.h"//减法类#include"MulOperation.h"//乘法类#include"DivOperation.h"//除法类#include"InvOperation.h"//乘方类class OperationFactory{public:Operation *CreateOperation(char oper){Operation *op=NULL;switch(oper){case'+':op=new AddOperation();break;case'-':op=new SubOperation();break;case'*':op=new MulOperation();break;case'/':op=new DivOperation();break;case'^':op=new InvOperation();break;default:break;}return op;}};

#pragma once#include<iostream>using namespace std;class Operation{public:void setNum1(int num1){this->num1=num1;}void setNum2(int num2){this->num2=num2;}virtual int getResult()=0;//纯虚函数,不允许Operation类实例化对象protected:int num1;int num2;};

#pragma once#include"Operation.h"class AddOperation:public Operation{public:virtual int getResult(){return num1+num2;}};

#pragma once#include"Operation.h"class DivOperation:public Operation{public:virtual int getResult(){if(num2==0){cerr<<"Cannot be divided by 0!"<<endl;exit(1);}return num1/num2;}};

#pragma once#include"Operation.h"#include<cmath>//involution乘方运算class InvOperation:public Operation{public:virtual int getResult(){return pow((double)num1,(double)num2);}};

#pragma once#include"Operation.h"class MulOperation:public Operation{public:virtual int getResult(){return num1*num2;}};

#pragma once#include"Operation.h"class SubOperation:public Operation{public:virtual int getResult(){return num1-num2;}};

代码布局:



运行效果:


0 0
原创粉丝点击