Java设计模式实践:简单工厂模式实现计算器
需积分: 10 76 浏览量
更新于2024-08-26
收藏 416KB PPT 举报
"本文主要介绍了如何在Java中实现简单工厂设计模式,以及设计模式的核心价值——解决代码复用,避免程序频繁修改。通过一个简单的计算器案例,展示了简单工厂模式的具体应用,包括接口定义、具体实现类、算法工厂的创建以及测试代码的编写。"
在软件工程中,设计模式是经过时间验证的、通用的解决方案,用于解决常见的编程问题。其中,工厂模式是一种创建型设计模式,其核心思想是将对象的创建过程封装起来,使得客户端无需关注具体的创建细节,只需要知道如何请求即可。这样可以提高代码的灵活性和可扩展性,同时减少对原有代码的改动。
简单工厂模式是工厂模式的一种,它提供了一个静态方法来创建对象,根据传入的参数决定创建哪种类型的对象。在本例中,我们构建了一个简单的计算器应用,实现了加法和减法操作。
1. 共有的接口:`Oper` 是所有运算操作的公共接口,定义了基本的运算行为,例如 `getResult()` 方法,这样不管具体是加法还是减法,都可以通过这个接口进行操作。
```java
public class Oper {
public double getResult();
}
```
2. 各个具体实现类:`add` 和 `dis` 分别代表加法和减法操作,它们都继承自 `Oper` 接口,并实现其方法。
```java
class Add extends Oper {
private double numA;
private double numB;
// 构造器,设置操作数
public Add(double numA, double numB) {
this.numA = numA;
this.numB = numB;
}
@Override
public double getResult() {
return numA + numB;
}
}
class Dis extends Oper {
// 类似的实现,省略...
}
```
3. 算法工厂:`OperationFactory` 是简单工厂类,根据用户输入的运算符(如 "+" 或 "-")返回对应的运算对象。
```java
public class OperationFactory {
public static Oper createOperation(String operate) {
Oper op = null;
if (operate == null)
throw new Exception("运算符不能为空!");
else if (operate.equals("+"))
op = new AddOperation();
else if (operate.equals("-"))
op = new SubOperation();
else
throw new Exception("运算符错误!");
return op;
}
}
```
4. 测试代码:`OperationTest` 类用于模拟用户输入,调用工厂类创建运算对象,然后执行计算。
```java
public class OperationTest {
public static void main(String[] args) {
// 输入处理、运算符判断等,省略...
Operation op = OperationFactory.createOperation(operate);
op.setNumA(numA);
op.setNumB(numB);
double result = op.getResult();
System.out.println("运算结果为:" + result);
}
}
```
简单工厂模式的主要优点在于降低了客户端与产品之间的耦合度,使得客户端可以更容易地扩展或更改产品类型,而无需修改代码。然而,它的缺点是如果需要添加新的产品类型,可能需要修改工厂类,这违背了开闭原则(即对扩展开放,对修改关闭)。
在实际应用中,如果产品类型很多,或者需要支持更复杂的条件判断,可能会考虑使用工厂方法模式或抽象工厂模式。这些模式提供了更灵活的结构,以适应更多的场景和变化。
2019-09-15 上传
2013-04-13 上传
2018-05-02 上传
2018-06-11 上传
2010-07-21 上传
2010-07-29 上传
2017-02-06 上传
2024-11-06 上传
2011-04-22 上传
eo
- 粉丝: 33
- 资源: 2万+
最新资源
- Fisher Iris Setosa数据的主成分分析及可视化- Matlab实现
- 深入理解JavaScript类与面向对象编程
- Argspect-0.0.1版本Python包发布与使用说明
- OpenNetAdmin v09.07.15 PHP项目源码下载
- 掌握Node.js: 构建高性能Web服务器与应用程序
- Matlab矢量绘图工具:polarG函数使用详解
- 实现Vue.js中PDF文件的签名显示功能
- 开源项目PSPSolver:资源约束调度问题求解器库
- 探索vwru系统:大众的虚拟现实招聘平台
- 深入理解cJSON:案例与源文件解析
- 多边形扩展算法在MATLAB中的应用与实现
- 用React类组件创建迷你待办事项列表指南
- Python库setuptools-58.5.3助力高效开发
- fmfiles工具:在MATLAB中查找丢失文件并列出错误
- 老枪二级域名系统PHP源码简易版发布
- 探索DOSGUI开源库:C/C++图形界面开发新篇章