參考大話設計模式中簡單工廠模式,以兩個數字的加減乘除運算為例來分析簡單工廠模式的優缺點
1.從分層角度思考,數據計算和數據輸入體現在業務處理和業務展示兩個層面上,因此不能將兩者進行雜糅,封裝越發獨立越好。
2.程序中不同的地方在于計算方式的不同,所以對如何計算需要進行單獨處理,不可能是通用的處理方式。
package com.neutron.simple.factroy;/** * 操作抽象類 * * @author neutron * */public abstract class Operate { PRivate double numberA; private double numberB; /** * 數字計算方法 * * @return */ public abstract double count(); public double getNumberA() { return numberA; } public void setNumberA(double numberA) { this.numberA = numberA; } public double getNumberB() { return numberB; } public void setNumberB(double numberB) { this.numberB = numberB; } @Override public String toString() { return "Operate [numberA=" + numberA + ", numberB=" + numberB + "]"; } }package com.neutron.simple.factroy;/** * 加法操作類 * * @author neutron * */public class OperateAdd extends Operate { @Override public double count() { return this.getNumberA() + this.getNumberB(); }}package com.neutron.simple.factroy;/** * 減法操作類 * * @author neutron * */public class OperateSub extends Operate { @Override public double count() { return this.getNumberA() - this.getNumberB(); }}package com.neutron.simple.factroy;/** * 工廠類 * * @author neutron * */public class Factory { /** * 獲取操作類對象 * * @param operateMark 操作標識 * @return 操作對象 */ public static Operate getInstance(String operateMark) { Operate operate; switch(operateMark) { case "+": operate = new OperateAdd();break; case "-": operate = new OperateSub();break; default:operate = new OperateAdd();break; } return operate; }}/** * 業務邏輯處理 * * 簡單工廠設計模式 * 1.以兩個數據的操作為例 * 2.參考來源:大話設計模式 * * 簡單工廠優缺點總結: * 1.封裝變化,比如操作抽象類,所有的變化都是對數據的操作 * 2.增加可拓展性,符合開閉原則,新增加的業務邏輯只需要繼承操作類即可 * 3.工廠類不沒有符合開閉原則,但已經將修改范圍盡可能縮小。 * * 思考: * 和現實生活關聯,那么就會減少知識孤島問題的存在,不會出現出現學會就忘的情況。 * 如果羅馬只有幾條小道可以通向,那么它注定會被遺忘,但是如果上下入地水路無數條道路可以抵達, * 那么一定會深刻記憶在腦海中,就會存在何時使用就可以通過幾種路徑獲取該知識。 */package com.neutron.simple.factroy;客戶端
package com.neutron.simple.client;import java.util.Scanner;import com.neutron.simple.factroy.Factory;import com.neutron.simple.factroy.Operate;public class CountClient { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("請輸入操作數:"); double numberA = scanner.nextDouble(); System.out.println("請輸入操作符號:(+/-)"); String operateMark = scanner.next(); System.out.println("請輸入被操作數:"); double numberB = scanner.nextDouble(); scanner.close(); Operate oper = Factory.getInstance(operateMark); oper.setNumberA(numberA); oper.setNumberB(numberB); System.out.println("操作結果是:" + oper.count()); } /** * 不足: * 頁面展示邏輯中盡可能不要存在業務處理邏輯 * 此處處在業務處理邏輯,因此此處封裝并不是十分到位。 */}/** * 客戶端操作界面 * * @author neutron */package com.neutron.simple.client;運行結果
請輸入操作數:1請輸入操作符號:(+/-)+請輸入被操作數:1操作結果是:2.0
|
新聞熱點
疑難解答