用简单工厂模式实现加减乘除运算等计算

本文介绍了一个使用简单工厂模式实现的计算器程序,通过定义抽象基类Operation及其实现加、减、乘、除操作的派生类,配合OperationFactory工厂类,实现运算符的选择和运算结果的获取。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文参考《大话设计模式》进行总结

初级版本:

class program
{
	statis void Main(String[] args)
	{
		try
		{
			Console.Write("请输入数字A: ");
			string strNumberA = Console.ReadLine();
			Console.Write("请选择符号(+、-、*、/): ");
			string strOperate = Console.ReadLine();
			Console.Write("请输入数字B: ");
			string strNumberB = Console.ReadLine();
			sreing strResult = "";
			switch (strOperate)
			{
				case "+":
					strResult = Convert.ToString(Convert.ToDouble(strNumberA) + Convert.ToDouble(strNumberB));
					break;
				case "-":
					strResult = Convert.ToString(Convert.ToDouble(strNumberA) - Convert.ToDouble(strNumberB));
					break;
				case "*":
					strResult = Convert.ToString(Convert.ToDouble(strNumberA) * Convert.ToDouble(strNumberB));
					break;
				case "/":
					if (strNumberB != "0")
						strResult = Convert.ToString(Convert.ToDouble(strNumberA) / Convert.ToDouble(strNumberB));
					else
						strResult = "除数不能为0";
					break;
			}
			Console.WriteLine("结果是: " + strResult);
			Console.ReadLine();
		}
		catch (Exception ex)
		{
			Console.WriteLine("您的输入有错: " + ex.Message);
		}
	}
}

简单工厂模式实现方法:

Operation运算类(父类):

public class Operation
{
    private double _numberA = 0;
	private double _numberB = 0;
	
	public double NumberA
	{
		get { return _numberA; }
		set { _numberA = value;}
	}
	public double NumberB
	{
		get { return _numberB; }
		set { _numberB = value;}
	}
	public virtual double GetResult()
	{
		double result = 0;
		return result;
	}
}

加减乘除类:

class OperationAdd : Operation
{
	public override double GetResult()
	{
		double result = 0;
		result = NumberA + NumberB;
		return result;
	}
}
class OperationSub : Operation
{
	public override double GetResult()
	{
		double result = 0;
		result = NumberA - NumberB;
		return result;
	}
}
class OperationMul : Operation
{
	public override double GetResult()
	{
		double result = 0;
		result = NumberA * NumberB;
		return result;
	}
}
class OperationDiv : Operation
{
	public override double GetResult()
	{
		double result = 0;
		if (NumberB == 0)
			throw new Exception("除数不能为0。");
		result = NumberA / NumberB;
		return result;
	}
}

简单运算工厂类:

public class OperationFactory
{
	public static Operation createOperate(string operate)
	{
		Operation oper = null;
		switch (operate)
		{
			case "+":
				oper = new OperationAdd();
				break;
			case "-":
				oper = new OperationSub();
				break;
			case "*":
				oper = new OperationMul();
				break;
			case "/":
				oper = new OperationDiv();
				break;
		}
		return oper;
	}
}

客户端代码:

Operation oper;
oper = OperationFactory.createOperate(“+”);
oper.NumberA = 1;
oper.NumberB = 2;
double result = oper.GetResult();

简单来说就是创建一个单独的工厂类专门实例化出合适的对象,当然加减乘除类也采用了松耦合,通过多态,返回父类的方式实现了计算器的结果。具备可扩展性。

 

 

 

 

 

### 使用Java工厂模式实现四则运算 为了展示如何利用Java中的工厂模式来执行基本的算术操作(即加法、减法、乘法和除法),下面提供了一个具体的例子。此实例展示了创建不同类型的`Operation`对象的过程,这些对象代表不同的数学运算。 #### 定义抽象基类 `Operation` 首先定义一个名为`Operation`的接口或抽象类,它声明了一个公共的方法`getResult()`,该方法负责计算两个数之间的特定运算结果[^2]。 ```java public abstract class Operation { protected double numberA; protected double numberB; public void setNumberA(double numberA) { this.numberA = numberA; } public void setNumberB(double numberB) { this.numberB = numberB; } public abstract double getResult(); } ``` #### 实现具体的操作类 接着针对每一种可能的运算(加法、减法、乘法以及除法)分别创建对应的子类: - **Addition.java** ```java public class Addition extends Operation { @Override public double getResult() { return numberA + numberB; } } ``` - **Subtraction.java** ```java public class Subtraction extends Operation { @Override public double getResult() { return numberA - numberB; } } ``` - **Multiplication.java** ```java public class Multiplication extends Operation { @Override public double getResult() { return numberA * numberB; } } ``` - **Division.java** ```java public class Division extends Operation { @Override public double getResult() { if (numberB != 0) { return numberA / numberB; } else { throw new ArithmeticException("Divisor cannot be zero."); } } } ``` #### 构建工厂类 `OperationFactory` 最后一步是构建一个静态工厂方法,用于根据输入参数返回适当的具体`Operation`实例。这可以通过如下所示的方式完成: ```java public class OperationFactory { // 静态工厂方法 public static Operation createOperate(String operate) { switch(operate){ case "+": return new Addition(); case "-": return new Subtraction(); case "*": return new Multiplication(); case "/": return new Division(); default: throw new IllegalArgumentException("Unsupported operation"); } } } ``` 上述代码片段实现了基于字符串标识符的选择逻辑,从而允许客户端仅需传递所需运算符即可获得相应的`Operation`对象实例。 通过这种方式,可以轻松扩展支持更多种类的操作而无需修改现有代码结构,体现了良好的面向对象编程实践。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值