简单工厂设计模式
简单工厂模式,工厂类为实际的创建类,必须提供static 方法
计算器功能通过简单工厂类实现
主体类:
public class MainClass {
/** 简单工厂类型实现方法 **/
public static void simpleFactory(){
//计算器
System.out.println("--- 计算器程序 ---");
//输入第一个数
System.out.println("请输入第一个数");
Scanner sc = new Scanner(System.in);
String firstNum = sc.nextLine();
System.out.println("请输入运算符");
String oper = sc.nextLine();
System.out.println("请输入第二个数");
String secondNum = sc.nextLine();
double result =0.0;
// 简单工厂模式,需要在实体工厂中创建具体的运算类
Operation operationo = OperationFactory.getOperation(oper);
operationo.setFirstNum(firstNum);
operationo.setSecondNum(secondNum);
result = operationo.getResult();
System.out.println("执行结果="+result);
}
/** run class **/
public static void main(String[] args) {
MainClass.simpleFactory();
}
}
简单工厂类
public class OperationFactory {
//简单工厂类是创建实体类的工厂,且需要提供static 方法
public static Operation getOperation(String oper){
if("+".equals(oper)){
return new AddOperation();
}
return null;
}
}
抽象出来一个操作类,方便程序扩展,具体的操作类进行实现getResult方法
/** 计算的抽象操作类 **/
public abstract class Operation {
public String getFirstNum() {
return firstNum;
}
public void setFirstNum(String firstNum) {
this.firstNum = firstNum;
}
public String getSecondNum() {
return secondNum;
}
public void setSecondNum(String secondNum) {
this.secondNum = secondNum;
}
private String firstNum;
private String secondNum;
/** 具体的实现类完成运算结果的实现 **/
public abstract double getResult();
}
具体的操作类。加减乘除等等
DEMO:AddOperation
public class AddOperation extends Operation {
public double getResult() {
return Double.parseDouble(this.getFirstNum())+ Double.parseDouble(this.getSecondNum());
}
}
简单工厂类的缺点, OperationFactory 类,首先不符合面向对象的程序设计开-闭原则 , 此类在计算器需要提供减法运算时,需要在已经开放的类型中进行修改,如
public static Operation getOperation(String oper){
if("+".equals(oper)){
return new AddOperation();
}
//** 每次新增功能都需要在此处加上else if 语句及相关代码 **//
else if("-".equals(oper)){
return new SubtractionOperation();
}