Design Patterns Talk - Simple Factory Pattern

《大話設(shè)計模式》第 1 章 - 簡單工廠模式 的 Swift 實現(xiàn)屠尊。

問題

做一個計算器蓄髓〈叮客戶端輸入兩個數(shù)字和運算符號,得到計算結(jié)果疯攒。

方案

1. 松耦合

把加減乘除等運算分離嗦随,修改其中一個不影響另外的幾個,增加運算算法也不影響其他代碼敬尺。

class Operation{
    private var _numberA: Double = 0
    private var _numberB: Double = 0
    
    var numberA: Double{
        get{
            return _numberA
        }
        set{
            _numberA = newValue
        }
    }
    
    var numberB: Double{
        get{
            return _numberB
        }
        set{
            _numberB = newValue
        }
    }
    
    func GetResult() -> Double{
        let result: Double = 0
        return result
    }
}

子類加減乘除等算法類繼承運算類枚尼,重載了父類的運算方法實現(xiàn)運算。如果要修改任何一個算法砂吞,不需要提供其他算法的代碼署恍。

class OperationAdd: Operation{
    override func GetResult() -> Double {
        var result: Double = 0
        result = numberA + numberB
        return result
    }
}

class OperationSub: Operation{
    override func GetResult() -> Double {
        var result: Double = 0
        result = numberA - numberB
        return result
    }
}

class OperationMul: Operation{
    override func GetResult() -> Double {
        var result: Double = 0
        result = numberA * numberB
        return result
    }
}

class OperationDiv: Operation{
    override func GetResult() -> Double {
        guard numberB != 0 else {
            print("除數(shù)不能為 0")
            return 0
        }
        var result: Double = 0
        result = numberA / numberB
        return result
    }
}

2. 多態(tài)

工廠類封裝業(yè)務(wù),只需要輸入運算符號蜻直,工廠就實例化出合適的對象盯质,通過多態(tài)袁串,返回運算類實現(xiàn)計算。

class OperationFactory{
    class func createOperate(operate: String) -> Operation?{
        var oper: Operation?
        
        switch operate {
        case "+":
            oper = OperationAdd()
        case "-":
            oper = OperationSub()
        case "*":
            oper = OperationMul()
        case "/":
            oper = OperationDiv()
        default: break
        }
        return oper
    }
}

測試

UI 層通過簡單的方式調(diào)用運算類唤殴。

let op = OperationFactory.createOperate(operate: "+")
op?.numberA = 1
op?.numberB = 2
op?.GetResult()

playground

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末般婆,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子朵逝,更是在濱河造成了極大的恐慌,老刑警劉巖乡范,帶你破解...
    沈念sama閱讀 222,590評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件配名,死亡現(xiàn)場離奇詭異,居然都是意外死亡晋辆,警方通過查閱死者的電腦和手機渠脉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來瓶佳,“玉大人芋膘,你說我怎么就攤上這事“运牵” “怎么了为朋?”我有些...
    開封第一講書人閱讀 169,301評論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長厚脉。 經(jīng)常有香客問我习寸,道長,這世上最難降的妖魔是什么傻工? 我笑而不...
    開封第一講書人閱讀 60,078評論 1 300
  • 正文 為了忘掉前任霞溪,我火速辦了婚禮,結(jié)果婚禮上中捆,老公的妹妹穿的比我還像新娘鸯匹。我一直安慰自己,他們只是感情好泄伪,可當(dāng)我...
    茶點故事閱讀 69,082評論 6 398
  • 文/花漫 我一把揭開白布殴蓬。 她就那樣靜靜地躺著,像睡著了一般臂容。 火紅的嫁衣襯著肌膚如雪科雳。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,682評論 1 312
  • 那天脓杉,我揣著相機與錄音糟秘,去河邊找鬼。 笑死球散,一個胖子當(dāng)著我的面吹牛尿赚,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 41,155評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼凌净,長吁一口氣:“原來是場噩夢啊……” “哼悲龟!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起冰寻,我...
    開封第一講書人閱讀 40,098評論 0 277
  • 序言:老撾萬榮一對情侶失蹤须教,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后斩芭,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體轻腺,經(jīng)...
    沈念sama閱讀 46,638評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,701評論 3 342
  • 正文 我和宋清朗相戀三年划乖,在試婚紗的時候發(fā)現(xiàn)自己被綠了贬养。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,852評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡琴庵,死狀恐怖误算,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情迷殿,我是刑警寧澤儿礼,帶...
    沈念sama閱讀 36,520評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站贪庙,受9級特大地震影響蜘犁,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜止邮,卻給世界環(huán)境...
    茶點故事閱讀 42,181評論 3 335
  • 文/蒙蒙 一这橙、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧导披,春花似錦屈扎、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至止毕,卻和暖如春模蜡,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背扁凛。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評論 1 274
  • 我被黑心中介騙來泰國打工忍疾, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人谨朝。 一個月前我還...
    沈念sama閱讀 49,279評論 3 379
  • 正文 我出身青樓卤妒,卻偏偏與公主長得像甥绿,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子则披,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,851評論 2 361

推薦閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法共缕,類相關(guān)的語法,內(nèi)部類的語法士复,繼承相關(guān)的語法图谷,異常的語法,線程的語...
    子非魚_t_閱讀 31,665評論 18 399
  • 這個系列面試題主要目的是幫助你拿輕松到offer阱洪,同時還能開個好價錢蜓萄。只要能夠搞明白這個系列的絕大多數(shù)題目,在面試...
    獨念白閱讀 342評論 0 3
  • 設(shè)計模式基本原則 開放-封閉原則(OCP)澄峰,是說軟件實體(類、模塊辟犀、函數(shù)等等)應(yīng)該可以拓展俏竞,但是不可修改。開-閉原...
    西山薄涼閱讀 3,808評論 3 14
  • 文/羽商三少 最近喜歡上了健身堂竟,發(fā)現(xiàn)健身其實是一個挺奇妙的事物魂毁。 健身不是追求肌肉越大塊越好,健身不是追求體型越瘦...
    羽商三少閱讀 819評論 1 3
  • 今天是跟你分開的第六十二天出嘹,其實我也記不清楚席楚,就姑且說是這個數(shù)吧。晚上出去覓食税稼,看到家家店滿就一直往前走烦秩,想起你之...
    蕭不二閱讀 95評論 0 0