简单的工厂设计模式,下面用一计算器的例子来实现这个简单的工厂设计模式。
工厂设计模式的关键是一个工厂类,工厂类为操作提供每个操作的方法,每个操作都只是要调用工厂类的方法就可以对每个操作进行操作。这样就节约了开销和节约了代码,提高了代码的可重用度和代码的工整性。
下面实现的是一个计算器的工厂模式。
首先是一个计算器工厂,这个在设计的时候使用了单进单出的单态原则
public class opreationFactory { public opreation creatOpreation( char opreation){ opreation op = null; switch( opreation ){ case '+': op = new opreationAdd(); break; case '-': op =new opreationSub(); break; case '*': op = new opreationMul(); break; case '/': op = new opreationDiv(); break; default : break; } return op; } }
下面是一个操作的对象实体类:
/** * * @author Knowbody * */ public abstract class opreation { private double number1 = 0; private double number2 = 0; public double getNumber1() { return number1; } public void setNumber1(double number1) { this.number1 = number1; } public double getNumber2() { return number2; } public void setNumber2(double number2) { this.number2 = number2; } public abstract double getResult(); }
下面是工厂里面每个具体操作类的实现:
opreationAdd.java/** * @author Knowbody * */ public class opreationAdd extends opreation{ @Override public double getResult() { double result = 0; result = this.getNumber1() + this.getNumber2(); return result; } }
opreationDiv.java
/** * * @author Knowbody * */ public class opreationDiv extends opreation { @Override public double getResult() { double result = 0; try { if(getNumber2() != 0){ result = getNumber1()/getNumber2(); } } catch (Exception e) { System.err.println("第二个数不能为0"); } return result; } }
opreationSub.java
/** * @author Knowbody * */ public class opreationSub extends opreation{ @Override public double getResult() { double result = 0; result = this.getNumber1() - this.getNumber2(); return result; } }
opreationMul.java
/** * @author Knowbody * */ public class opreationMul extends opreation{ @Override public double getResult() { double result = 0; result = this.getNumber1() * this.getNumber2(); return result; } }
下面是一个主函数进行调用:
import java.util.Scanner; public class opreationMain { public static void main( String[] args){ opreationFactory opf = new opreationFactory(); opreation op = null; Scanner sc = new Scanner(System.in); System.out.print("请输入操作方式:"); char c = sc.next().charAt(0); op = opf.creatOpreation(c); while (op == null){ System.out.println("输入有误,请从新输入"); System.out.print("请输入操作方式:"); c = sc.next().charAt(0); op = opf.creatOpreation(c); } System.out.print("请输入第一个数字:"); op.setNumber1(sc.nextDouble()); System.out.print("请输入第二个数字:"); op.setNumber2(sc.nextDouble()); double result = op.getResult(); System.out.println("结果是:"+result); } }