Creational.SimpleFactory(创建型模式—工厂方法模式)

标签: DesignPattern(程序设计的指导思想) DesignPattern(程序设计的指导思想)
8人阅读 评论(0) 收藏 举报
分类:

//提供一个创建对象实例的功能,而无须关心其具体实现



//声明文件

//运算类(其它的加减乘法类从这里继承)
class CAbsOpt{
protected:
    double dNumber1;
    double dNumber2;
public:
    void SetNumber1(double number);
    double GetNumber1();
    void SetNumber2(double number);
    double GetNumber2();
    virtual double GetResult() = 0;
};
//加法类
class CAdd : public CAbsOpt{
public:
    double GetResult();
};
//减法类
class CSub : public CAbsOpt{
public:
    double GetResult();
};
//乘法类
class CMul : public CAbsOpt{
public:
    double GetResult();
};
//除法类
class CDiv : public CAbsOpt{
public:
    double GetResult();
};

//简单工厂类
class CSimpleFac{
public:
    static CAbsOpt* Calc(char cOpt);

};


//实现文件

//运算类(其它的加减乘法类从这里继承)
void CAbsOpt::SetNumber1(double number){dNumber1 = number;}
double CAbsOpt::GetNumber1(){return dNumber1;}
void CAbsOpt::SetNumber2(double number){dNumber2 = number;}
double CAbsOpt::GetNumber2(){return dNumber2;}
//加法类
double CAdd::GetResult(){return (dNumber1 + dNumber2);}
//减法类
double CSub::GetResult(){return (dNumber1 - dNumber2);}
//乘法类
double CMul::GetResult(){return (dNumber1 * dNumber2);}
//除法类
double CDiv::GetResult()
{
    const double dZero = 0.000000000000001;
    if((-dZero < dNumber2) && (dNumber2 < dZero))/*除数为0*/    return 0;
    return (dNumber1 / dNumber2);
}

//简单工厂类
CAbsOpt* CSimpleFac::Calc(char cOpt)
{
    CAbsOpt* pOpt = NULL;
    if(cOpt == '+')            pOpt = new CAdd();
    else if(cOpt == '-')        pOpt = new CSub();
    else if(cOpt == '*')        pOpt = new CMul();
    else if(cOpt == '/')        pOpt = new CDiv();
    return pOpt;

}




//测试客户端

void main()
{
    CAbsOpt* pOpt = CSimpleFac::Calc('/');
    pOpt->SetNumber1(12); pOpt->SetNumber2(4);
    cout << pOpt->GetNumber1() << "/" << pOpt->GetNumber2() << " = " << pOpt->GetResult() << endl;
}


查看评论

C++批判系列5--继承的本质

继承的本质继承关系是一种耦合度很高的关系,它与组合及一般化(genericity)一样,提供了OO中的一种基本方法,用以将不同的软件组件组合起来。一个类的实例同时也是那个类的所有的祖先的实例。为了保证...
  • cber
  • cber
  • 2001-06-09 15:59:00
  • 1480

5种创建型模式之:简单工厂和工厂方法模式

定义:定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类。 类型:创建类模式 类图: 工厂方法模式代码 [java] v...
  • qq_22075041
  • qq_22075041
  • 2017-04-07 22:24:49
  • 417

23种设计模式----创建型模式(工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式)

1.单例模式  单例模式(Singleton Pattern):确保某一个类只有一个实例,而且自己实例化并向整个系统提供这个实例。   通用类图如下:      通用代码如下:public cl...
  • oChangWen
  • oChangWen
  • 2017-06-17 21:37:07
  • 711

Factory Method 工厂方法模式(创建型模式).wmv

  • 2008年12月08日 22:03
  • 10.75MB
  • 下载

c#面向对象纵横谈(全)

  • 2009年11月09日 20:55
  • 3.92MB
  • 下载

Factory Method 工厂方法模式(创建型模式)

  • 2009年04月01日 17:16
  • 128KB
  • 下载

C#面向对象设计模式纵横谈4

  • 2007年11月15日 14:09
  • 8.46MB
  • 下载

C#面向对象设计模式纵横谈(4)

  • 2008年05月10日 22:41
  • 8.56MB
  • 下载

C++ 设计模式之——简单工厂模式(SimpleFactoryPattern)

简单工厂模式   简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建...
  • nie2314550441
  • nie2314550441
  • 2016-02-18 17:40:44
  • 692
    个人资料
    等级:
    访问量: 1747
    积分: 1064
    排名: 5万+
    文章存档