前言
没有什么一战成名,都只是百炼成钢!
本文配合《大话设计模式》工厂模式一起使用,因为原书中使用的C#代码,看起来有点麻烦!所以我变动了一下改成了Java代码,若是有错误还望指出,本人将感激不尽!谢谢!
- 代码要做到可维护、可复用、可扩展、灵活性好
UML相关知识图示
工厂模式样例——Java
运算类
Operation.java
package factory;
public class Operation {
private double numberA;
private double numberB;
public double getNumberA() {
return numberA;
}
public double getNumberB() {
return numberB;
}
public void setNumberA(double numberA) {
this.numberA = numberA;
}
public void setNumberB(double numberB) {
this.numberB = numberB;
}
public double getResult() {
double result = 0;
return result;
}
}
加法类
OperationAdd继承于Operation
package factory;
public class OperationAdd extends Operation {
@Override
public double getResult() {
// TODO Auto-generated method stub
double result = getNumberA()+getNumberB();
return result;
}
}
减法类
package factory;
public class OperationSub extends Operation{
@Override
public double getResult() {
// TODO Auto-generated method stub
double result = getNumberA()-getNumberB();
return result;
}
}
乘法类
package factory;
public class OperationMul extends Operation{
@Override
public double getResult() {
// TODO Auto-generated method stub
double result = getNumberA()*getNumberB();
return result;
}
}
除法类
package factory;
public class OperationDiv extends Operation {
@Override
public double getResult() {
// TODO Auto-generated method stub
double result = 0;
try {
result = getNumberA() / getNumberB();
} catch (Exception e) {
// TODO: handle exception
System.err.println("除数不能为0!运算出错!");
}
return result;
}
}
简单工厂类
package factory;
public class OperationFactory {
public static Operation createOperation(String operate) {
Operation oper = null;
switch (operate) {
case "+":
oper = new OperationAdd();
break;
case "-":
oper = new OperationSub();
break;
case "*":
oper = new OperationMul();
break;
case "/":
oper = new OperationDiv();
break;
default:
System.err.println("运算符号有错误!异常退出!");
break;
}
return oper;
}
}
客户端类
package factory;
public class client {
public static void main(String[] args) {
Operation oper;
oper = OperationFactory.createOperation("---");
try {
oper.setNumberA(1);
oper.setNumberB(2);
double result = oper.getResult();
System.out.println(result);
} catch (NullPointerException e) {
// TODO: handle exception
System.err.println("空指针异常!!!!!!");
}
}
}