您的位置:首页 > 其它

简单工厂模式

2016-12-08 17:14 218 查看
  前言,搞开发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);

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: