簡單工廠模式的作用在於解決開發過程中模組與模組之間的耦合性, 使得各個模組之間的功能劃分更加清晰,對於設計模式的理解需要結合具體的應用場景才能深入理解,本文將通過乙個具體的業務場景來說明簡單工廠設計模式的優點以及什麼場景下適合用簡單工廠模式。
某天你所在的軟體公司突然接到乙個開發的任務,要幫助某個銷售汽車的4s店做乙個**,作為專案組長的你把這個任務分配給了程式猿小a,小b和小c, 其中小a主要負責關於各類汽車資訊的開發,小b要負責將各類汽車的配件引數取出傳給前端進行展示,小c主要負責將各類汽車的**提供給前端進行展示。接到上述任務後,三隻後端的程式猿經過一番彼此溝通,拿到的各自任務模型圖如下:
上面的圖的意思是,a程式設計師定義了兩種汽車的類,並把兩類汽車的配置資訊和**設定為類物件屬性,b程式設計師和c程式設計師由於需要使用a程式設計師汽車類的一些資訊,於是就在各自的類中根據輸入資訊的不同,建立不同的汽車類物件,並其將對應型別汽車的資訊返回。上面這種邏輯看上去沒什麼毛病, 但是從下面的角度思考一下,還是有一些問題的。
這種設計實際上是耦合性太強,**不利於擴充套件。想想這麼乙個場景,如果程式中又增加了乙個奧迪的車型,a程式設計師這時候會定義乙個奧迪車的類,b和c程式設計師此時還需要去更改自己類中的**,如果還有其它的程式設計師或者的類需要用到了汽車類,則都需要去更改自己的**,這顯然是一種不合理的設計模式。
對於上述的設計怎麼優化呢?我們可以看出b和c關心的只是自己拿到的物件,對於函式中的if判斷語句是迫於輸入的資訊不確定才寫的,而且任何與汽車類相關的類都需要重寫一遍這些判斷的冗餘**,很簡單的一種思想就是我們將建立汽車物件的過程抽離出來,放在乙個單獨的類中,這樣其它類在使用汽車類時就不必自己單獨進行汽車物件的建立,只需要去呼叫特定的類中調取特定的方法,就可以拿到自己需要的物件,這樣既降低了程式的耦合性,增加了模組的單一職責性和可擴充套件性,又降低了**的冗餘度,避免了侵入式的開發。(已經完成的**盡量不再修改)
talk is cheap, i will show my model.
更改後的**實現如下圖所示:
通過上面的修改,無論以後增加多少種汽車,只需要a在 ca***ctory裡修改一遍**,其它的類無需修改自己類中的**,就可以拿到增加的汽車的資訊,這種設計方式叫做簡單工廠模式。
說了這麼多,總結一下應用簡單工廠模式的場景,如果使用者需要應用某一種功能的幾個類的例項,而這種功能的類以後還有可能會擴充套件增加,我們通常 會用乙個工廠類,將使用者需要的例項在工廠中建立之後並返回,工廠類中會完成一些常見的判斷操作,從而適配不同的使用者類所需要的物件。
工廠模式 簡單工廠
簡單工廠其實並不是乙個設計模式,反而比較像一種程式設計習慣。我個人的這樣總結簡單工廠 建立乙個類,封裝建立物件的 故事 現在我要開一家披薩店,叫bbk 必敗客 披薩,賣很多種披薩 芝士披薩 榴蓮披薩等等,我有乙個orderpizza string type 方法,根據客戶傳來的type來提供不同的披...
工廠模式 簡單工廠
工廠 處理建立物件的細節。目的 將例項化具體類的 從應用中抽離,或者封裝起來,可以避免干擾應用的其他部分。簡單工廠 簡單工廠其實不是乙個設計模式,反而像一種程式設計習慣。產品實現 desc 產品a public inte ce a class a1 implements a override pub...
簡單工廠模式,工廠模式,抽象工廠模式
三種模式看了一天,記錄下自己的理解 headfirst,比薩店為例 1,簡單工廠模式 乙個具體的工廠類 pizzafactory 乙個抽象的產品類pizza,可以派生出多個具體的產品類 客戶 pizzastore類 工廠類 pizzafactory類關聯產品類pizza,工廠生產出不同型別的pizz...