設計模式-簡單工廠模式

簡單工廠模式:
案例:請用C++、Java、C#或vb.net任意一種面嚮對象語言實現一個計算機控制檯程序,要求輸入兩個數和運算符號獲得結果
case1:變量命名規範
case2:使用switch分支判斷輸入的運算符(取代if/else)
case3:新要求,如何易維護,易擴展,又容易複用?答曰:面向對象算法

3.1 易維護:要改功能,如將控制檯的計算器修改成windows的計算器如何實現?
3.2 易複用:代碼的邏輯可能並不只是符合當前的功能,將來新的功能可能能夠複用這個代碼邏輯(功能)
3.3 易擴展:就目前案例,假如僅知足加減法,易擴展表明的就是在不影響加,減法功能的前提下(不須要從新編譯等),添加乘除,開平方位移運算等

case4:首先想到的作法會是將控制檯輸入,運算,結果展現都寫到一個方法(類)裏,假如須要在不一樣的端作展現或計算時得複製代碼,修改部分邏輯,但這樣代碼冗餘,重複代碼就很是多了。解決措施是將計算的代碼,與顯示的代碼分離開,即單獨封裝好計算功能與顯示功能。那麼計算功能在該條件下是能夠複用的。編程

case5:那麼若是須要新增個運算方式,此時封裝的計算功能的類須要從新編譯,添加一個switch分支,爲此,能夠抽象出一個共通的父類,如算法類,各個運算都須要繼承這個算法類,該算法類提供了一個獲取計算結果值的方法,各子類(加減乘除運算類)僅需重寫該方法,如此即使新增再多的新運算對以前的功能也沒有影響windows

case6:本章重點來了,有那麼多的子運算類了,如何管理好?經過工廠模式,在工廠類中的靜態方法接收運算符參數再生產子運算類對象(switch 根據運算符 條件判斷 生產那個子類對象 ),而後用父類對象去接收(多態),再把要計算的值賦給父類的成員變量,最後調用獲取計算結果的方法獲取到結果。.net

總結下:沒想到一個這麼小的功能就能夠把抽象、封裝、繼承、多態體現的如此淋漓盡致,作個編程的有心人,避免作代碼的搬運工。code

相關文章
相關標籤/搜索