简单工厂模式

来源:互联网 发布:nodejs mysql github 编辑:程序博客网 时间:2024/05/20 12:25

http://blog.csdn.net/tianshuai11/article/details/7671097

根据《大话设计模式》里的例子编写的

//simpleFactory.cpp#include <iostream>#include <string>#include "operation.h"using namespace std;int main(){    double numA, numB;    Operation *oper = NULL;    oper = OperationFactory::createOperation('*');    if(oper != NULL)    {        oper->setNumA(3.89);        oper->setNumB(4.78);        cout << "Result is: " << oper->getResult() << endl;    }    return 0;}

 

//operation.h
#ifndef _OPERATION_H_#define _OPERATION_H_class Operation{    public:        Operation(){ numA = 0.0; numB = 0.0;}        virtual ~Operation(){}        double getNumA();        double getNumB();        void setNumA(double A);        void setNumB(double B);        virtual double getResult() {return 0;}             protected:        double numA;        double numB;};class Add: public Operation{    public:        Add() {}        ~Add() {}        double getResult();};class Sub: public Operation{    public:        Sub() {}        ~Sub() {}        double getResult();};class Mul: public Operation{    public:        Mul() {}        ~Mul() {}        double getResult();};class Div: public Operation{    public:        Div() {}        ~Div() {}        double getResult();};class OperationFactory{    public:        OperationFactory() {}        ~OperationFactory() {}        static Operation *createOperation(char op);};double Operation::getNumA(){    return this->numA;}double Operation::getNumB(){    return this->numB;}void Operation::setNumA(double A){    this->numA = A;}void Operation::setNumB(double B){    this->numB = B;}double Add::getResult(){    return numA + numB;}double Sub::getResult(){    return numA - numB;}double Mul::getResult(){    return numA * numB;}double Div::getResult(){    if(numB == 0.0)        return 0;    return numA / numB;}Operation *OperationFactory::createOperation(char op){    Operation *oper = NULL;    switch(op)    {        case '+':            oper = new Add();            break;        case '-':            oper = new Sub();            break;        case '*':            oper = new Mul();            break;        case '/':            oper = new Div();            break;        default:            oper = NULL;            break;    }    return oper;}#endif



 

原创粉丝点击