第6章 工廠模式
內(nèi)容來自尚硅谷Java設(shè)計模式(圖解+框架源碼剖析)_嗶哩嗶哩_bilibili
寫在前面:本文內(nèi)容大致和原視頻內(nèi)老師的筆記內(nèi)容相同,會偶爾插入自己的注釋和理解,盡量會完成作業(yè)
6.1簡單工廠模式
6.1.1看一個具體的需求
看一個披薩的項目:要便于披薩種類的擴展,要便于維護
1)????? 披薩的種類很多(比如GreckPizza、CheesePizza 等)
2)????? 披薩的制作有prepare,bake,cut,box
3)????? 完成披薩店訂購功能。
?
6.1.2使用傳統(tǒng)的方式來完成
1)????? 思路分析(類圖)

編寫OrderPizza.java 去訂購各種需要的Pizza
1)????? 代碼演示
6.1.3傳統(tǒng)的方式的優(yōu)缺點
1)????? 優(yōu)點是比較好理解,簡單易操作。
2)????? 缺點是違反了設(shè)計模式的ocp原則,即對擴展開放,對修改關(guān)閉。即當我們給類增加新功能的時候,盡量不修改代碼,或者盡可能少修改代碼.
3)????? 比如我們這時要新增加一個Pizza的種類(Pepper 披薩),我們需要做如下修改.
如果增加一個pizza類,只要是訂購披薩的代碼,都需要修改

4)????? 改進的思路分析
分析:修改代碼可以接受,但是如果我們在其它的地方也有創(chuàng)建Pizza的代碼,就意味著,也需要修改,而創(chuàng)建Pizza的代碼,往往有多處。
思路:把創(chuàng)建Pizza對象封裝到一個類中,這樣我們有新的Pizza種類時,只需要修改該類就可,其它有創(chuàng)建到Pizza對象的代碼就不需要修改了>簡單工廠模式
6.1.4簡單工廠模式的基本介紹
1)????? 簡單工廠模式是屬于創(chuàng)建型模式,是工廠模式的一種。簡單工廠模式是由一個工廠對象決定創(chuàng)建出哪一種產(chǎn)品類的實例。簡單工廠模式是工廠模式家族中最簡單實用的模式
2)????? 簡單工廠模式:定義了一個創(chuàng)建對象的類,由這個類來封裝實例化對象的行為(代碼)
3)????? 在軟件開發(fā)中,當我們會用到大量的創(chuàng)建某種、某類或者某批對象時,就會使用到工廠模式
6.1.5使用簡單工廠模式
簡單工廠模式的設(shè)計方案:定義一個可以實例化Pizza對象的類,封裝創(chuàng)建對象的代碼。


代碼演示

6.2工廠方法模式
6.2.1看一個新的需求
披薩項目新的需求:客戶在點披薩時,可以點不同口味的披薩,比如北京的奶酪pizza、北京的胡椒pizza或者是倫敦的奶酪pizza、倫敦的胡椒pizza。
?
6.2.2思路1
使用簡單工廠模式,創(chuàng)建不同的簡單工廠類,比如BJPizaSimpleFactory、LDPizaSimpleFactory等等.從當前這個案例來說,也是可以的,但是考慮到項目的規(guī)模,以及軟件的可維護性、可擴展性并不是特別好
?
6.2.3思路2
使用工廠方法模式
6.2.4工廠方法模式介紹
1.工廠方法模式設(shè)計方案:將披薩項目的實例化功能抽象成抽象方法,在不同的口味點餐子類中具體實現(xiàn)。
2.工廠方法模式:定義了一個創(chuàng)建對象的抽象方法,由子類決定要實例化的類。工廠方法模式將對象的實例化推遲到子類。
?
6.2.5工廠方法模式應(yīng)用案例
披薩項目新的需求:客戶在點披薩時,可以點不同口味的披薩,比如北京的奶酪pizza、北京的胡椒pizza或者是倫敦的奶酪pizza、倫敦的胡椒pizza。
?
思路分析

或者看下面這張圖

代碼實現(xiàn)

6.3抽象工廠模式
6.3.1基本介紹
1)????? 抽象工廠模式:定義了一個interface用于創(chuàng)建相關(guān)或有依賴關(guān)系的對象簇,而無需指明具體的類
2)????? 抽象工廠模式可以將簡單工廠模式和工廠方法模式進行整合。
3)????? 從設(shè)計層面看,抽象工廠模式就是對簡單工廠模式的改進(或者稱為進一步的抽象)。
4)????? 將工廠抽象成兩層,AbsFactory(抽象工廠)和具體實現(xiàn)的工廠子類。程序員可以根據(jù)創(chuàng)建對象類型使用對應(yīng)的工廠子類。這樣將單個的簡單工廠類變成了工廠簇,更利于代碼的維護和擴展。
5)????? 類圖

或者看下面的一張圖

6.3.2抽象工廠模式的應(yīng)用實例
使用抽象工廠模式完成披薩項目

6.4工廠模式在JDK-Calendar應(yīng)用的源碼分析
1)????? JDK中的Calendar類中,就使用了簡單工廠模式
2)????? 源碼分析+Debug源碼+說明
源碼部分

6.5工廠模式小結(jié)
1)????? 工廠模式的意義
將實例化對象的代碼提取出來,放到一個類中統(tǒng)一管理和維護,達到和主項目的依賴關(guān)系的解耦。從而提高項目的擴展和維護性。
2)????? 三種工廠模式()
3)????? 設(shè)計模式的依賴抽象原則
?? 創(chuàng)建對象實例時,不要直接new類,而是把這個new類的動作放在一個工廠的方法中,并返回。有的書上說,變量不要直接持有具體類的引用。
?? 不要讓類繼承具體類,而是繼承抽象類或者是實現(xiàn)interface(接口)
?? 不要覆蓋基類中已經(jīng)實現(xiàn)的方法。