一、UML类图

面向对象编程时,在整理对象之间关系时,用UML类图梳理,会更加清晰。
二、简单工厂模式
1.简单工厂模简介
简单工厂模式,利用一个工厂来生产不同类型的对象,达到服务层代码根据需求更改时,客户端代码接口不用进行修改。客户端可直接创建自己新增的需求对象并进行操作。由于比较简单,见代码很容易理解,故不做赘述。
2.C++代码如下
//定义基类操作数OperatorDP
#ifndef _MOPERATORDP_HPP
#define _MOPERATORDP_HPP
class OperatorDP{
public:
OperatorDP() = default;
OperatorDP(double _num1, double _num2) : num1(_num1), num2(_num2){}
double getNum1(){return num1;}
double getNum2(){return num2;}
void setNum1(double num){num1 = num;}
void setNum2(double num){num2 = num;}
virtual double getResult() = 0; // 虚函数
private:
double num1;
double num2;
};#endif
// 加法类
#ifndef _ADDDP_HPP
#define _ADDDP_HPP
#include"operatordp.hpp"
class AddDP : public OperatorDP{
public:
AddDP(double n1, double n2):OperatorDP(n1, n2){}
virtual double getResult(){
return getNum1() + getNum2();
}
};
#endif
//减法类
#ifndef _SUBTRACTDP_HPP
#define _SUBTRACTDP_HPP
#include"operatordp.hpp"
class SubtractDP:public OperatorDP{
public:
SubtractDP(double n1, double n2):OperatorDP(n1, n2){}
virtual double getResult(){
return getNum1() - getNum2();
}
};
#endif
//乘法类
#ifndef _MULTIPLYDP_HPP
#define _MULTIPLYDP_HPP
#include"operatordp.hpp"
class MultiplyDP:public OperatorDP{
public:
MultiplyDP(double n1, double n2):OperatorDP(n1, n2){}
virtual double getResult(){
return getNum1() * getNum2();
}
};
#endif
//除法类
#ifndef _DIVIDEDP_HPP
#define _DIVIDEDP_HPP
#include<iostream>
#include<cmath>
#include"operatordp.hpp"
using namespace std;
class DivideDP : public OperatorDP{
public:
DivideDP(double n1, double n2):OperatorDP(n1, n2){}
virtual double getResult(){
if(abs(getNum2()) < e){
cout << "divisor can't be zero"<<endl;
getchar();
abort();
}
else{
return getNum1() / getNum2();
}
}
private:
static const double e;
};
const double DivideDP::e = 0.000000000001;
#endif
// 测试
#include<iostream>
#include"adddp.hpp"
#include"dividedp.hpp"
#include"multiplydp.hpp"
#include"subtractdp.hpp"
using namespace std;
int main(){
AddDP myadd(5,3);
cout << myadd.getResult()<<endl;
SubtractDP mysubtract(6,2);
cout << mysubtract.getResult()<<endl;
DivideDP mydivide(5,0);
cout << mydivide.getResult()<<endl;
MultiplyDP mymultiply(10,2);
cout << mymultiply.getResult()<<endl;
getchar();
return 0;
}
通过代码我们很容易就能发现,如果客户想新增加一个需求比如指数运算,那么只需新建一个继承OperatorDP的指数类,然后实现里面的方法getResult()就行了。对客户端来书,只需创建一个新的指数类对象,并调用方法getResult()。可见客户使用方法没变。服务端代码也实现了解耦,使代码更加易于维护。
来源:https://www.cnblogs.com/yb-blogs/p/12381791.html