Java设计模式实践:简单工厂模式实现计算器
需积分: 10 17 浏览量
更新于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);
}
}
```
简单工厂模式的主要优点在于降低了客户端与产品之间的耦合度,使得客户端可以更容易地扩展或更改产品类型,而无需修改代码。然而,它的缺点是如果需要添加新的产品类型,可能需要修改工厂类,这违背了开闭原则(即对扩展开放,对修改关闭)。
在实际应用中,如果产品类型很多,或者需要支持更复杂的条件判断,可能会考虑使用工厂方法模式或抽象工厂模式。这些模式提供了更灵活的结构,以适应更多的场景和变化。
744 浏览量
点击了解资源详情
点击了解资源详情
113 浏览量
104 浏览量
311 浏览量
104 浏览量
158 浏览量
2010-07-29 上传

eo
- 粉丝: 35
最新资源
- 网页自动刷新工具 v1.1 - 自定义时间间隔与关机
- pt-1.4协程源码深度解析
- EP4CE6E22C8芯片三相正弦波发生器设计与实现
- 高效处理超大XML文件的查看工具介绍
- 64K极限挑战:国际程序设计大赛优秀3D作品展
- ENVI软件全面应用教程指南
- 学生档案管理系统设计与开发
- 网络伪书:社区驱动的在线音乐制图平台
- Lettuce 5.0.3中文API文档完整包下载指南
- 雅虎通Yahoo! Messenger v0.8.115即时聊天功能详解
- 将Android手机转变为IP监控摄像机
- PLSQL入门教程:变量声明与程序交互
- 掌握.NET三层架构:实例学习与源码解析
- WPF中Devexpress GridControl分组功能实例分析
- H3Viewer: VS2010专用高效帮助文档查看工具
- STM32CubeMX LED与按键初始化及外部中断处理教程