簡單工廠模式(java)

1.提出問題:設計一個簡單的計算器功能拧略。

原始版本:

定義減法

private final static String ADD = "+";

public static void main(String[] args) {

? ? System.out.println("請輸入數字A");

? ? Scanner scannerA = new Scanner(System.in);

? ? double numberA = scannerA.nextDouble();

? ? System.out.println("請輸入數字B");

? ? Scanner scannerB = new Scanner(System.in);

? ? double numberB = scannerB.nextDouble();

? ? System.out.println("請輸入運算符C");

? ? Scanner scannerC = new Scanner(System.in);

? ? String operator = scannerC.next();

? ? if (ADD.equalsIgnoreCase(operator)) {

? ? ? ? System.out.println(numberA + numberB);

? ? }

}

這樣就實現了一個加法計算器芦岂,那么問題來了,如果我要為計算器新增減法功能呢垫蛆?有些同學就說新增一個if判斷不就好了禽最?那么問題又來了,我有N個類都用了計算器我們是不是就要去N個地方去修改袱饭?是的川无,那么我們很容易就可以想到利用封裝的思想將計算邏輯與控制臺輸入給分開,改造好的運算邏輯方法虑乖,如下:

/**

* 這里用到了封裝思想懦趋,封裝了運算方法,將輸入和運算邏輯分開了

* @param numberA 輸入的第一個值

* @param numberB 輸入的第二個值

* @param operator 運算符

* @author WangHan

* @date 2019/1/21 16:15

*/

private static double operation(double numberA, double numberB, String operator) {

? ? if (ADD.equalsIgnoreCase(operator)) {

? ? ? ? return numberA + numberB;

? ? } else if (SUBTRACT.equalsIgnoreCase(operator)) {

? ? ? ? return numberA - numberB;

? ? }else {

? ? ? ? return 0;

}

}

這樣盡管我有N多個地方輸入計算值和計算符號,我也可以都調用這一個operation方法來計算結果!這就是封裝的思想了船老。

繼續(xù):

如果此時要增加兩個運算符*和/,需要修改operation方法讓加減法也參與了重新編譯蔓涧,如果不小心將加減法改錯那么就是坑爹!

增加需求绒障,盡可能的擴展的來解決問題而不是去修改原來的代碼

此時我們新增一個算法的父類Operation:

@Data

public class Operation {

? ? public double numberA = 0;

? ? public double numberB = 0;

? ? public double getResult() {

? ? ? ? return 0;

}

? ? public static class OperationAdd extends Operation {

? ? ? ? /**

? ? ? ? * 重寫getResult方法

? ? ? ? */

? ? ? ? @Override

? ? ? ? public double getResult() {

? ? ? ? ? ? return numberA + numberB;

}

}

? ? public static class OperationSub extends Operation {

? ? ? ? /**

? ? ? ? * 重寫getResult方法

? ? ? ? */

? ? ? ? @Override

? ? ? ? public double getResult() {

? ? ? ? ? ? return numberA - numberB;

}

}

}

并且新增兩個子類OperationAdd 和OperationSub 去繼承Operation分別實現加減算法。

新增一個工廠類OperationFactory:

class OperationFactory {

? ? static Operation createOperation(double numberA, double numberB, String operator) {

? ? ? ? Operation operation;

? ? ? ? switch (operator) {

? ? ? ? ? ? case "+":

? ? ? ? ? ? ? ? operation = new Operation.OperationAdd();

? ? ? ? ? ? ? ? operation.setNumberA(numberA);

? ? ? ? ? ? ? ? operation.setNumberB(numberB);

? ? ? ? ? ? ? ? return operation;

? ? ? ? ? ? case "-":

? ? ? ? ? ? ? ? operation = new Operation.OperationSub();

? ? ? ? ? ? ? ? operation.setNumberA(numberA);

? ? ? ? ? ? ? ? operation.setNumberB(numberB);

? ? ? ? ? ? ? ? return operation;

? ? ? ? ? ? default:

? ? ? ? ? ? ? ? return null;

}

}

}

通過判斷運算符去確定我要實例化那個算法的子類就可以了

這樣在實現計算器功能的時候就用到了簡單工廠模式,我們調用工廠類去實例化算法:

Optional<Operation> optional = Optional.ofNullable(OperationFactory.createOperation(numberA, numberB, operator));

optional.ifPresent(operation ->System.out.println("第三版計算結果:" + operation.getResult()));

學習到這里簡答做個筆記遂跟!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子幻锁,更是在濱河造成了極大的恐慌凯亮,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件哄尔,死亡現場離奇詭異假消,居然都是意外死亡,警方通過查閱死者的電腦和手機岭接,發(fā)現死者居然都...
    沈念sama閱讀 90,755評論 3 385
  • 文/潘曉璐 我一進店門富拗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人鸣戴,你說我怎么就攤上這事啃沪。” “怎么了窄锅?”我有些...
    開封第一講書人閱讀 158,369評論 0 348
  • 文/不壞的土叔 我叫張陵创千,是天一觀的道長。 經常有香客問我入偷,道長追驴,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,799評論 1 285
  • 正文 為了忘掉前任盯串,我火速辦了婚禮氯檐,結果婚禮上,老公的妹妹穿的比我還像新娘体捏。我一直安慰自己冠摄,他們只是感情好,可當我...
    茶點故事閱讀 65,910評論 6 386
  • 文/花漫 我一把揭開白布几缭。 她就那樣靜靜地躺著河泳,像睡著了一般。 火紅的嫁衣襯著肌膚如雪年栓。 梳的紋絲不亂的頭發(fā)上拆挥,一...
    開封第一講書人閱讀 50,096評論 1 291
  • 那天,我揣著相機與錄音某抓,去河邊找鬼纸兔。 笑死,一個胖子當著我的面吹牛否副,可吹牛的內容都是我干的汉矿。 我是一名探鬼主播,決...
    沈念sama閱讀 39,159評論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼备禀,長吁一口氣:“原來是場噩夢啊……” “哼洲拇!你這毒婦竟也來了奈揍?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,917評論 0 268
  • 序言:老撾萬榮一對情侶失蹤赋续,失蹤者是張志新(化名)和其女友劉穎男翰,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體纽乱,經...
    沈念sama閱讀 44,360評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡蛾绎,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,673評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了迫淹。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片秘通。...
    茶點故事閱讀 38,814評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖敛熬,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情第股,我是刑警寧澤应民,帶...
    沈念sama閱讀 34,509評論 4 334
  • 正文 年R本政府宣布,位于F島的核電站夕吻,受9級特大地震影響诲锹,放射性物質發(fā)生泄漏。R本人自食惡果不足惜涉馅,卻給世界環(huán)境...
    茶點故事閱讀 40,156評論 3 317
  • 文/蒙蒙 一归园、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧稚矿,春花似錦庸诱、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至昧识,卻和暖如春钠四,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背跪楞。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評論 1 267
  • 我被黑心中介騙來泰國打工缀去, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人甸祭。 一個月前我還...
    沈念sama閱讀 46,641評論 2 362
  • 正文 我出身青樓缕碎,卻偏偏與公主長得像,于是被迫代替她去往敵國和親淋叶。 傳聞我的和親對象是個殘疾皇子阎曹,可洞房花燭夜當晚...
    茶點故事閱讀 43,728評論 2 351

推薦閱讀更多精彩內容

  • 【程序1】 題目:古典問題:有一對兔子伪阶,從出生后第3個月起每個月都生一對兔子,小兔子長到第三個月后每個月又生一...
    阿里高級軟件架構師閱讀 3,283評論 0 19
  • 【程序1】 題目:古典問題:有一對兔子处嫌,從出生后第3個月起每個月都生一對兔子栅贴,小兔子長到第三個月后每個月又生一對兔...
    開心的鑼鼓閱讀 3,311評論 0 9
  • 【程序1】 題目:古典問題:有一對兔子,從出生后第3個月起每個月都生一對兔子熏迹,小兔子長到第三個月后每個月又生一對兔...
    葉總韓閱讀 5,129評論 0 41
  • 一檐薯、需求 請用Java實現一個計算機控制臺程序,要求輸入倆個數和運算符注暗,得到結果坛缕。 二、初步實現 三捆昏、反思 這種實...
    Mr丶sorrow閱讀 559評論 0 0
  • 50道經典Java編程練習題赚楚,將數學思維運用到編程中來。抱歉哈找不到文章的原貼了骗卜,有冒犯的麻煩知會聲哈~ 1.指數...
    OSET我要編程閱讀 6,952評論 0 9