前言,搞开发2年了,一直没法写出高质量的代码。对比别人写的代码,感觉自己还是在设计模式这块应用的不够灵活。利用年终事少,恶补一下。闲话不多说,下面先介绍下简单工厂模式。 阅读了《大话设计模式》第一章,介绍了简单工厂模式,不过是.net语言写的。个人觉得尽管对简单工厂的概念一知半解了,但是还是实际写一遍才会理解更加深刻。题目:实现一个计算器运算(+,-,*,/) //节省时间,借用下别人代码
double result = 0;
// 1.接收控制台输入
System.out.println("-----计算器程序-----");
System.out.println("输入第一个操作数");
Scanner scan = new Scanner(System.in);
String strNum1 = scan.nextLine();
System.out.println("输入运算符");
String oper = scan.nextLine();
System.out.println("输入第二个操作数");
String strNum2 = scan.nextLine();
// 2.进行运算
if ("+".equals(oper)) {
result = Double.parseDouble(strNum1) + Double.parseDouble(strNum2);
} else if ("-".equals(oper)) {
result = Double.parseDouble(strNum1) - Double.parseDouble(strNum2);
} else if ("*".equals(oper)) {
result = Double.parseDouble(strNum1) * Double.parseDouble(strNum2);
} else if ("/".equals(oper)) {
result = Double.parseDouble(strNum1) / Double.parseDouble(strNum2);
}
System.out.println(strNum1 + oper + strNum2 + "=" + result);
相信大多数人没有考虑设计模式的人都会这样实现的,其实这是面向过程的一种思想,想到哪写到哪,可维护,可扩展性差。
(具体原因不多说,想具体了解去看看大话设计模式)
通过工厂模式实现如下:
(1)定义一个抽象类
/**
* 实现面向对象业务封装
*
* @author wgd
*
*/
public abstract class IOperation {
public abstract double getResult();
private double numberA, numberB;
public double getNumberB() {
return numberB;
}
public void setNumberB(double numberB) {
this.numberB = numberB;
}
public double getNumberA() {
return numberA;
}
public void setNumberA(double numberA) {
this.numberA = numberA;
}
}(2)增加实现具体业务的操作子类,由于乘法和除法大同小异不过多介绍。/**
* 实现加法
*
* @author wgd
*
*/
public class AddOperation extends IOperation {
@Override
public double getResult() {
return getNumberA() + getNumberB();
}
}
/**
* 实现减法
*
* @author wgd
*
*/
public class SubOpreation extends IOperation {
@Override
public double getResult() {
return getNumberA() - getNumberB();
}
}
(3)通过简单工厂类管理操作子类
/**
* 简单工厂管理操作类
* @author wgd
*
*/
public class FactoryOperation {
public static IOperation createOperaton(String operate) {
IOperation operation = null;
switch (operate) {
case "+":
operation = new AddOperation();
break;
case "-":
operation = new SubOpreation();
break;
default:
break;
}
return operation;
}
}(4)实例化操作类
public class ExampleTest {
public static void main(String[] args) {
double numberA = 3d, numberB = 5d, result = 0d;
IOperation iOperation = FactoryOperation.createOperaton("-");// 简单工厂
iOperation.setNumberA(numberA);
iOperation.setNumberB(numberB);
result = iOperation.getResult();
System.out.println("result==" + result);
}
}
1570

被折叠的 条评论
为什么被折叠?



