1.工廠模式
工廠模式是我們最常用的例項化物件模式了,是用工廠方法代替new操作的一種模式。著名的Jive論壇 ,就大量使用了工廠模式,工廠模式在Java程式系統可以說是隨處可見。因為工廠模式就相當於建立例項物件的new,我們經常要根據類Class生成例項物件,如A a=new A() 工廠模式也是用來建立例項物件的,所以以後new時就要多個心眼,是否可以考慮使用工廠模式,雖然這樣做,可能多做一些工作,但會給你係統帶來更大的可擴充套件性和儘量少的修改量。
需求:實現一個簡單的加減乘除計算器
第一步:
//運算類 public class Operation { private double _numberA=0; private double _numberB=0; public double get_numberA() { return _numberA; } public void set_numberA(double _numberA) { this._numberA = _numberA; } public double get_numberB() { return _numberB; } public void set_numberB(double _numberB) { this._numberB = _numberB; } /** *得到運算結果 * @author ys-developer * @return * @since JDK 1.6 */ public double getResult(){ double result=0; return result; } }
第二步:
//加法類,繼承運算類,在重寫結果方法 public class OperationAdd extends Operation{ @Override public double getResult(){ double result=0; result=get_numberA()+get_numberB(); return result; } }
//減法類:繼承運算類,再重寫結果方法 public class OperationSub extends Operation { @Override public double getResult(){ double result=0.0; result=get_numberA()-get_numberB(); return result; } }
第三步:
//工廠類 public class OperationFactor { public static Operation createOperation(String operation){ Operation oper=null; switch (operation) { case "+": oper=new OperationAdd(); break; case "-": oper=new OperationSub(); break; default: break; } return oper; } }
最後測試:
public class Test { public static void main(String[] args) { Operation oper=new Operation(); Scanner scan = new Scanner(System.in); boolean isok=true; while (isok) { System.out.println("請輸入數字A:"); double a=scan.nextInt(); System.out.println("請輸入運算子號(+、-、*、/):"); String b=scan.next(); System.out.println("請輸入數字B"); double c=scan.nextInt(); oper=OperationFactor.createOperation(b); oper.set_numberA(a); oper.set_numberB(c); System.out.println("結果等於:"+oper.getResult()); System.out.println("是否繼續(y/n)"); String d=scan.next(); if (d.equals("n")) { break; } } } }
總結:後面想加更多的演算法,可直接建立一個演算法類,然後再工廠的switch裡面新增一個判斷即可,也說明了一點每加一個演算法就得重複改動工廠類,如果有一百種演算法那麼就改100次,所以為了優化工廠模式,可以使用 “反射模式” 可解決此問題