從零開始單排學設計模式「簡單工廠設計模式」黑鐵 III
閱讀本文大概需要 2 分鐘。
本篇是設計模式系列的第二篇,雖然之前也寫過相應的文章,但是因為種種原因後來斷掉了,而且發現之前寫的內容也很渣,不夠系統。所以現在打算重寫,加上距離現在也有一段時間了,也算是自己的一個回顧吧!
學而時習之,不亦說乎。
推薦閱讀:
從零開始單排學設計模式「UML類圖」定級賽
目前段位:黑鐵 III
Let‘s Go!
前言
設計模式不是語法,是一種巧妙的寫法,能把程序變的更加靈活。架構模式比設計模式大,架構模式是戰略,而設計模式是戰術。
設計模式分為3大類型:創建型,行為型,結構型,總共有23種。
簡單工廠模式
簡單工廠模式設計模式屬於創建型設計模式,但不屬於23種設計模式範圍內,屬於23種設計模式中工廠方法的入門模式,又叫靜態工廠方法模式。
簡單工廠模式是一個工廠對象決定創建出哪一種產品類的實例。它的好處是隱藏對象創建,不用依賴對象,可以隨意更換對象。
在工廠模式中,工廠類中的所有方法返回同一個抽象產品類,代碼的升級和擴展只需要在這個工廠類中註入新的功能方法,返回抽象產品類即可,或是另外寫接口,將這個抽象產品類強制轉換成這個接口,讓具體產品類去實現。
業務需求
如果讓你設計一個簡單的計算器,實現兩位數的簡單加減乘除運算,你會怎麽設計呢?
代碼實現
剛接到需求的你,絕對會發現,需求是如此so easy(很容易),刷刷刷的就完成了任務。
實現思路很簡單,一個運算類,用來計算結果的,一個計算器類,用來實現交互並接收參數的。
寫完的代碼如下
我們來運行一遍,看下結果
是不是很簡單,哈哈,我真是個天才(自戀一下),寫完之後看著自己寫的代碼,總覺得似乎不妥。
Java的特點是面向對象,而面向對象的三大特征是封裝、繼承和多態。我這裏好像只用到了封裝,將運算類進行一個簡單封裝,但是繼承和多態卻沒有體現出來.....要是這樣提交代碼,被leader(領導)看到那豈不是要被拖出去槍斃,不行,還得再改改。
再次改版之後運算類Operation代碼如下
(PS:這裏僅僅是為了方便所以聲明的是內部類,實際開發類似的程序時不要這樣寫,因為如果程序變復雜之後,這種編寫方式不利於維護)
新創建了一個簡單工廠類,用於實現業務邏輯。
計算器類改動不大
來試試新版的計算器,看一下結果
這樣提交代碼問題應該不大了。
新版的代碼中,你只需要輸入運算符號,工廠就實例化出合適的對象,通過多態,返回父類的方式實現了計算器的結果。同時,如果後續需要對程序維護,如要維護加法類,那麽只需要提供新增方法的代碼即可,不需要全部代碼都提供,提高了整個項目的安全性。
簡單工廠模式UML類圖
總結
工廠(Factory):用一個單獨的類來做這個類創造實例的過程,這就是工廠。
簡單工廠模式解決的就是對象創建問題。
當我們已知的某些條件後,對類的選擇,而這些類都是同一父類的子類,那麽我們就可以使用簡單工廠模式。
往期精彩回顧
房東:你敢申報,我就漲房租!京東取消年終獎!
一千行MySQL詳細學習筆記(值得學習與收藏)
你女朋友是高可用麽?
在Java中如何優雅地判空
最近整個業內狀態不太好,註意提防一些公司的小九九!
Java爬取並下載酷狗TOP500歌曲
如何計算服務器能夠承受多大的pv?
程序員們,別再學習框架了!
專科程序員與本科程序員之間有什麽區別?
程序員的一天是怎樣過的?
從 0 開始手寫一個Tomcat,7 步搞定!
![技術分享圖片](https://upload-images.jianshu.io/upload_images/15410091-b1aeb61cb2fb92b2.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
歡迎關註我的公眾號「程序員的成長之路」,閱讀更多精彩!
從零開始單排學設計模式「簡單工廠設計模式」黑鐵 III