下面链接文章是我改写的简单工厂模式,可以和工厂模式做对比。

https://blog.csdn.net/qq_34784043/article/details/82925158

程序:输入两个数和运算符,得到 结果。

虽然工厂模式比简单工厂模式编写复杂一点,但是它更符合“开放-封闭原则”,就是程序增加功能应该是通过增加代码方式,而不是修改原来的代码。在简单工厂模式里每次增加一个功能,比如“取平方”,就要增加一个取平方的运算类和修改对应的工厂类。在工厂模式里面,只需要增加一个运算类和一个工厂类,其他程序不需要修改。

下面是UML图:

C++重写《大话设计模式》中模式实例二(工厂模式)

下面是 Operaction.h:

#pragma once

//运算类
class Operation {
private:
	double _numberA;
	double _numberB;

public:
	void SetNumberA(double NumberA) {
		_numberA = NumberA;
	}
	double GetNumberA() {
		return _numberA;
	}
	void SetNumberB(double NumberB) {
		_numberB = NumberB;
	}
	double GetNumberB() {
		return _numberB;
	}
	virtual double GetResult() {
		double result = 0;
		return result;
	}
};

//加法类
class OperationAdd :public Operation {
public:
	virtual double GetResult() {
		double result = 0;
		result = GetNumberA() + GetNumberB();
		return result;
	}
};

//减法类
class OperationSub :public Operation {
public:
	virtual double GetResult() {
		double result = 0;
		result = GetNumberA() - GetNumberB();
		return result;
	}
};

//乘法类
class OperationMul :public Operation {
public:
	virtual double GetResult() {
		double result = 0;
		result = GetNumberA() * GetNumberB();
		return result;
	}
};

//除法类
class OperationDiv :public Operation {
public:
	virtual double GetResult() {
		double result = 0;
		if (GetNumberB() == 0) {
			char str[] = "除数不能为0";
			throw str;
		}
		result = GetNumberA() / GetNumberB();
		return result;
	}
};

下面是Factory.h:

#pragma once
#include "Operation.h"

class IFactory {
public:
	IFactory(){}
	virtual double CreateOperation(double NumberA, double NumberB) = 0;
};

class AddFactory :public IFactory {
public:
	virtual double CreateOperation(double NumberA, double NumberB) {
		OperationAdd oper;
		oper.SetNumberA(NumberA);
		oper.SetNumberB(NumberB);
		return oper.GetResult();
	}
};

class SubFactory :public IFactory {
public:
	virtual double CreateOperation(double NumberA, double NumberB) {
		OperationSub oper;
		oper.SetNumberA(NumberA);
		oper.SetNumberB(NumberB);
		return oper.GetResult();
	}
};

class MulFactory :public IFactory {
public:
	virtual double CreateOperation(double NumberA, double NumberB){
		OperationMul oper;
		oper.SetNumberA(NumberA);
		oper.SetNumberB(NumberB);
		return oper.GetResult();
	}
};

class DivFactory :public IFactory {
public:
	virtual double CreateOperation(double NumberA, double NumberB) {
		OperationDiv oper;
		oper.SetNumberA(NumberA);
		oper.SetNumberB(NumberB);
		return oper.GetResult();
	}
};

下面是main.cpp:

#include "Factory.h"
#include <iostream>
#include <cstdlib>
using namespace std;

int main() {
	try {
		IFactory *operFactory = new AddFactory();
		cout << "1 + 2 = " << operFactory->CreateOperation(1, 2) << endl;
	}
	catch (char str[]) {
		cout << str << endl;
	}
	system("pause");
	return 0;
}

 运行结果:

C++重写《大话设计模式》中模式实例二(工厂模式)

 

相关文章:

  • 2022-01-16
  • 2021-11-22
  • 2021-08-31
  • 2022-01-25
  • 2021-04-10
  • 2021-10-17
  • 2021-11-19
  • 2021-07-06
猜你喜欢
  • 2021-05-05
  • 2021-10-19
  • 2021-10-16
  • 2022-01-26
  • 2022-02-25
  • 2021-11-13
  • 2021-11-22
相关资源
相似解决方案