一、简单工厂模式
1.封装
体现面向对象的封装的思想
代码如下(示例):
#pragma once
#include<iostream>
#include<string>
using namespace std;
// 操作类
class Operation
{
public:
enum oper{add,sub,mul,div};
static double getResult(double numberA, double numberB, int operate); // 获取结果
private:
};
#include"operation.h"
double Operation::getResult(double numberA, double numberB, int operate)
{
double result = 0;
switch (operate)
{
case add:
result = numberA + numberB;
break;
case sub:
result = numberA - numberB;
break;
case mul:
result = numberA * numberB;
break;
case div:
result = numberA / numberB;
break;
default:
cout << "输入有误" << endl;
break;
}
return result;
}
// 实现一个计算器 加减法
int main()
{
double numA = 0;
double numB = 0;
int operate = 0;
double result = 0.00;
while (1)
{
cout << "请输入数字A:" << endl;
cin >> numA;
cout << "请输入运算符号(+、-、*、/ 对应选项 0 1 2 3):" << endl;
cin >> operate;
cout << "请输入数字B:" << endl;
cin >> numB;
// 面向对象的封装 将运算和界面分开
result = Operation::getResult(numA, numB, operate);
cout << "result = " << result << endl;
cout << endl;
}
/*请输入数字A:
10
请输入运算符号(+、 - 、 * 、):
3
请输入数字B:
0
result = inf*/
system("pause");
return 0;
}
2.继承、多态、工厂模式
在封装的基础上假如继承、多态、工厂模式,实现更好的面向对象编程
代码如下(示例):
#pragma once
#include<iostream>
#include<string>
using namespace std;
// 操作类-----基类
class OPERATION
{
public:
// OPERATION() {};
// get
double get_NumberA() { return m_NumberA; }
double get_NumberB() { return m_NumberB; }
// set
void set_NumberA(double numberA) { m_NumberA = numberA; }
void set_NumberB(double numberB) { m_NumberB = numberB; }
// 虚函数
virtual double getResult() { double result = 0; return result; }; // 获取结果值
private:
double m_NumberA;
double m_NumberB;
};
#pragma once
#include"operation.h"
// 加法-----派生类
class OPERATION_ADD : public OPERATION
{
public:
// OPERATION_ADD() : OPERATION() {};
double getResult () override
{
return (get_NumberA() + get_NumberB());
}
};
#pragma once
#include"operation.h"
// 减法类-----派生类
class OPERATION_SUB : public OPERATION
{
public:
double getResult() override
{
return (get_NumberA() - get_NumberB());
}
};
#pragma once
#include"operation.h"
// 乘法类-----派生类
class OPERATION_MUL : public OPERATION
{
public:
double getResult() override
{
return (get_NumberA() * get_NumberB());
}
};
#pragma once
#include"operation.h"
// 除法类-----派生类
class OPERATION_DIV : public OPERATION
{
public:
double getResult() noexcept override
{
if (get_NumberB() == 0) {
cout << "零不能做除数" << endl;
abort(); // 中止程序
}
return (get_NumberA() / get_NumberB());
}
};
#pragma once
#include"operation_Add.h"
#include"operation_Sub.h"
#include"operation_Mul.h"
#include"operation_Div.h"
// 工厂模式类-----确定实例化对象
class OPERATION_FACTORY
{
public:
// enum oper { add, sub, mul, div };
// static OPERATION_FACTORY createOperate(int operate)
static OPERATION* createOperate(char operate,double numA,double numB)
{
// 根据不同需求 添加不同的类
OPERATION* oper = NULL;
switch (operate)
{
case '+':
oper = new OPERATION_ADD();
oper->set_NumberA(numA);
oper->set_NumberB(numB);
oper->getResult();
break;
case '-':
oper = new OPERATION_SUB();
oper->set_NumberA(numA);
oper->set_NumberB(numB);
oper->getResult();
break;
case '*':
oper = new OPERATION_MUL();
oper->set_NumberA(numA);
oper->set_NumberB(numB);
oper->getResult();
break;
case '/':
oper = new OPERATION_DIV();
oper->set_NumberA(numA);
oper->set_NumberB(numB);
oper->getResult();
break;
default:
cout << "输入有误" << endl;
break;
}
return oper;
}
};
#include"operation.h"
#include"operation_Factory.h"
// 主函数 实现一个计算器(加减乘除) 利用面向对象思想
int main()
{
double numA = 0;
double numB = 0;
char operate = NULL;
double result = 0.00;
while (1)
{
cout << "请输入数字A:" << endl;
cin >> numA;
cout << "请输入运算符号(+、-、*、/):" << endl;
cin >> operate;
cout << "请输入数字B:" << endl;
cin >> numB;
// 创建基类对象
OPERATION* oper;
// 从工厂中获取所需的派生类
oper = OPERATION_FACTORY::createOperate(operate, numA, numB);
// 执行该派生类的多态行为
double result = oper->getResult();
cout << "result = " << result << endl;
cout << endl;
}
system("pause");
return 0;
}
总结
提示:这里对文章进行总结: