Java设计模式实践:简单工厂模式实现计算器
需积分: 10 86 浏览量
更新于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 上传
2018-06-11 上传
2018-05-02 上传
2010-07-21 上传
2013-04-13 上传
2010-07-29 上传
eo
- 粉丝: 34
- 资源: 2万+
最新资源
- 硬盘高级维修技巧硬盘维修整理资料汇总
- Foundations Of Qt Development (英文/PDF)
- 让你的ADSL开机自动拨号
- 软件开发项目计划(实践)
- C#设计模式(word文档)
- flex事件机制详解
- text_porcess_in_python
- data mining and KDD: promise and challenges
- flex cookbook中文
- 事业单位考试绝密资料
- AJAX开发框架GWT
- Serial Port Complete-COM Ports, USB Virtual COM Ports, and Ports for Embedded Systems, 2nd Edition.pdf
- java 的面试试题
- 埃特梅尔AT89S52 单片机 参数资料
- § 1.2 Java的 特 点
- 线性代数(同济四版)习题答案