读了一下大话设计模式这本书,发现非常不错,现在把练习的代码贴上来,,当然写得很烂,欢迎大家指正。
第一章:
SimpleFactory.h
#ifndef SIMPLEFACTORY_H
#define SIMPLEFACTORY_H
#include <string>
using namespace std;
class Operate
{
protected:
double NumA=0.;
double NumB=0.;
public:
Operate()=default;
Operate(double NumA_, double NumB_) :NumA(NumA_), NumB(NumB_){};
virtual double GetResult()
{
return 0.;
}
};
class OperAdd :public Operate
{
public:
OperAdd() = default;
OperAdd(double NumA_, double NumB_) :Operate(NumA_, NumB_){};
double GetResult() override
{
return NumA + NumB;
}
};
class OperSub :public Operate
{
public:
OperSub() = default;
OperSub(double NumA_, double NumB_) :Operate(NumA_, NumB_){};
double GetResult() override
{
return NumA - NumB;
}
};
class OperMult :public Operate
{
public:
OperMult() = default;
OperMult(double NumA_, double NumB_) :Operate(NumA_, NumB_){};
double GetResult() override
{
return NumA*NumB;
}
};
class OperDiv :public Operate
{
public:
OperDiv() = default;
OperDiv(double NumA_, double NumB_) :Operate(NumA_, NumB_){};
double GetResult() override
{
if (NumB == 0.)
throw "除数为0";
return NumA / NumB;
}
};
class SimpleFactory
{
public:
SimpleFactory() = default;
double SwithOpra(const char OP, double NumA_, double NumB_)
{
switch (OP)
{
case '+':
{
OperAdd add=OperAdd(NumA_, NumB_);
return add.GetResult();
break;
}
case '-':
{
OperSub sub = OperSub(NumA_, NumB_);
return sub.GetResult();
break;
}
case '*':
{
OperMult mult = OperMult(NumA_, NumB_);
return mult.GetResult();
break;
}
case '/':
{
OperDiv div = OperDiv(NumA_, NumB_);
return div.GetResult();
break;
}
default:
break;
}
}
};
#endif
main.cpp
#include "SimpleFactory.h"
#include <iostream>
using namespace std;
int main()
{
SimpleFactory fac ;
cout << fac.SwithOpra('+', 1., 2.) << endl;
cout << fac.SwithOpra('-', 1., 2.) << endl;
cout << fac.SwithOpra('*', 1., 2.) << endl;
cout << fac.SwithOpra('/', 1., 2.) << endl;
system("pause");
return 0;
}