大话设计模式之简单的工厂模式
来源:互联网 发布:淘宝答题红包 编辑:程序博客网 时间:2024/06/08 02:58
通过面向对象的三大特征封装、继承和多态,简单的计算器代码实现
Operation运算类,这是一个父类,所有运算方法都继承此类。
public abstract class Operation { public BigDecimal numberA; public BigDecimal numberB; public BigDecimal getNumberA() { return numberA; } public void setNumberA(BigDecimal numberA) { this.numberA = numberA; } public BigDecimal getNumberB() { return numberB; } public void setNumberB(BigDecimal numberB) { this.numberB = numberB; } public abstract BigDecimal getResult();}
这是一个抽象的类,里面有一个抽象的方法getResultI(),和两个Number属性。之所以使用抽象类,是因为继承抽象类,必须重写抽象类的抽象方法,通过子类实现计算功能。
OperationAdd 加法类,继承运算类
public class OperationAdd extends Operation { public BigDecimal getResult(){ BigDecimal result = null; result = numberA.add(numberB); return result; }}
OperationSubtract 减法类,继承运算类
public class OperationSubtract extends Operation { public BigDecimal getResult(){ BigDecimal result = null; result = numberA.subtract(numberB); return result; }}
OperationMultiply 乘法类,继承运算类
public class OperationMultiply extends Operation { public BigDecimal getResult(){ BigDecimal result = null; result = numberA.multiply(numberB); return result; }}
OperationDivide 除法类,继承运算泪
public class OperationDivide extends Operation { public BigDecimal getResult(){ BigDecimal result = null; result = numberA.divide(numberB); return result; }}
简单的工厂模式,就是用一个单独的类来做实例化对象的过程,这就是工厂,来,让我们看看工厂类怎么写。
OperationFactory 简单的运算工厂类
public class OperationFactory { public Operation createOperation(String optrate){ Operation operation = null; switch (optrate) { case "+": operation = new OperationAdd(); break; case "-": operation = new OperationSubtract(); break; case "*": operation = new OperationMultiply(); break; case "/": operation = new OperationDivide(); break; default: break; } return operation; }}
这样子,只需要输入运算符号,工厂就会实例化出合适的对象,通过多态,返回父类的方法实现了计算器的结果。
最后写一个Main方法实现计算功能
public class Main { public static void main(String[] args) { OperationFactory operationFactory = new OperationFactory(); Operation operation = operationFactory.createOperation("*"); operation.setNumberA(new BigDecimal("10")); operation.setNumberB(new BigDecimal("0.0058")); BigDecimal result = operation.getResult(); System.out.println(result); }}
如果以后需要更改加法运算,只需要改OperationAdd这个类就可以,需要添加各种复杂的运算,只需要添加相应的运算子类就可以,然后在修改运算类工厂,在switch中添加分支。
这样一个简单的工厂模式就实现了,这里面用到了面向对象的三大特征:封装一个抽象的运算父类,所以的算法类全部继承父类,通过算法工厂,多态的实例化出合适的对象。
0 0
- 大话设计模式之简单工厂模式
- 大话设计模式之简单工厂模式
- 大话设计模式之简单工厂模式
- 大话设计模式之简单工厂模式
- 大话设计模式之--简单工厂模式
- 大话设计模式之简单工厂模式
- 《大话设计模式》之简单工厂模式
- 《大话设计模式》之简单的工厂模式
- 大话设计模式之简单的工厂模式
- 大话设计模式之简单工厂模式、抽象工厂模式及工厂方法模式的比较
- 大话设计模式之简单工厂模式、抽象工厂模式及工厂方法模式的比较
- 大话设计之简单工厂模式
- 大话设计模式读书笔记之简单工厂
- 《大话设计模式》之 简单工厂模式和策略模式的区别和相同之处
- 大话设计模式之简单工厂模式&工厂方法模式&抽象工厂模式
- 大话设计模式之C++实现---简单工厂模式
- 大话设计模式学习之简单工厂模式
- 大话设计模式之简单工厂模式代码
- nginx配置项
- 《第一行代码》学习记录(二)
- Codeforces Beta Round #1 A,B,C
- python学习第一周--需求分析
- windows下安装双版本anaconda,以及配置jupyter notebook的kernel
- 大话设计模式之简单的工厂模式
- listview学习之arrayadapter初探
- 中南大学复试C语言上机题——捡石子
- 同学的阿里面试总结
- Eclipse环境下
- 数据结构--排序算法(插入排序&&选择排序)
- selenium服务器的启动
- PHP 环境搭建
- 杭电ACM 1069Monkey and Banana