简单工厂模式

来源:互联网 发布:马尔文粒径分析软件 编辑:程序博客网 时间:2024/05/16 00:56

软件设计的简单思想:业务逻辑 和 界面逻辑 分开
当我们需要写一个可重用的类:比如本例子,可用于windons 、web 等各种C++编写的平台。就需要仔细考虑如何把 类 模块化
利用该例子来简单阐明下简单工厂模式:
1、首先定义一个事物集合(事物也可为过程)。(该类有虚方法)
2、对在这个事物集合里的每个事物定义相关的类(该类继承事物继承类,且复写 virtual方法)
3、利用一个“工厂类” 把1、2联系起来。(利用多态:定义一个父类指针,根据要求即可生成相关的子类。返回一个基类指针)

#include "stdafx.h"#include<iostream>#include<string>using namespace std;class Operation//一个操作基类,在之后的过程中,主要用来作为指针,并指向它的派生类。{private:    double numberA,numberB;public:    void setA(double a){numberA = a;}    void setB(double b){numberB = b;}    double getA(){return numberA;}    double getB(){return numberB;}    virtual double GetResult(){return 0;}};//给每个操作定义相关的类class OperationAdd:public Operation{public:    double GetResult(){return getA()+getB();}};class OperationSub:public Operation{public:    double GetResult(){return getA()-getB();}};class OperationMul:public Operation{public:    double GetResult(){return getA()*getB();}};class OperationDiv:public Operation{public:    double GetResult(){return getA()/getB();}};//利用一个单独的类来创造实例:工厂//声明一个Operation父类指针,以一个字符串作为参数,动态生成各种操作,并用父类指针指向它们。class OperationFactory{public:    static Operation* creatOper(const char* operate)    {        Operation* oper =NULL;        switch (*operate)        {            case '+':                oper=new OperationAdd();                break;            case '-':                oper = new OperationSub();                break;            case '*':                oper = new OperationMul();                break;            case '/':                oper = new OperationDiv();                break;        }        return oper;    }};int _tmain(int argc, _TCHAR* argv[]){    //新建一个‘操作’    Operation *oper;    //用‘操作’工厂初始化一个操作  ‘ ’里面的内容可替换,如可换成水果    oper = OperationFactory::creatOper("-");    //使用操作    oper->setA(10);    oper->setB(20);    cout<<oper->GetResult();    delete oper;    return 0;}
0 0
原创粉丝点击