不論學習哪乙個設計模式,都要知道設計模式可以給我們帶來哪些好處,以及我們為什麼要學習設計模式。
根據老師教導以及個人的片面經驗,我認為使用設計模式的目的是 : 增強**的復用性以及可維護性。
可維護性就是以後是否方便擴充套件,增加了新的需求的話,**是否好改,會不會出現非常難處理的問題,比如說**沒有很好地復用,構建乙個物件的過程寫到了很多不同的類中,如果要修改構建過程的話,要全部修改,如果少改了乙個地方就可能出現bug。
所有的設計模式都是用來解決實際問題的,為了引入簡單工廠設計模式,我們模擬乙個需求:
需求:寫植物大戰殭屍中的乙個功能,玩家可以拖動任意乙個植物到任意乙個空地上然後開始戰鬥。
假設目前只有三種植物——豌豆射手,冰豆射手,堅果。
實現該需求:
1.寫三個類,分別表示需求中的三種植物,每個類都有兩個方法,乙個是獲取該類植物的名字,另乙個是列印出該類植物的戰鬥方式。
2.再寫乙個方法類,讓這個類負責完成拖動植物到空地的工作,需要兩個引數:植物名稱和要放到的目的地。根據名稱判斷要new哪個植物,然後執行移動,然後執行戰鬥方法。
下面給的實現方式,預設已經建立了三個滿足需求的植物類。【前提】
這樣寫的缺點是:重複**太多,每個if塊中都有system.out.println("……………………"); ,如果需要在放置後新增戰鬥方法的話,每個if塊中全部都要加上戰鬥方法,更是顯得重複了,非常不方便以後修改。
怎麼樣能讓**不這麼重複呢?答案是把生成物件的邏輯和執行業務的邏輯區分開來,如下圖
想要寫成這個樣子,需要抽取出乙個介面,planet,讓三種植物都實現planet介面即可。
建立乙個生成植物的工廠類
在任何需要生成植物物件的地方如下方式使用即可
為了實現**復用性,增加可維護性,我們讓我們的**盡量的符合設計原則,自己能寫出符合設計原則的**也很好,設計模式是一些固定的套路,幫助我們更加簡單的實現符合設計原則的**。
每乙個植物有自己的工廠類可以生產對應的植物,抽取出來乙個植物工廠介面,所有的植物工廠類都要實現植物工廠介面,用乙個簡單工廠設計模式寫乙個返回植物工廠類的方法,根據植物名稱或者其他資訊返回對應的植物工廠類。好處:如果新增了新的植物,只需要建立乙個對應的工廠類去實現植物工廠介面,然後在簡單工廠中新增乙個if else即可,新增植物不需要修改原始碼。
工廠方法設計模式
給每乙個植物新增乙個工廠類,抽取出來乙個植物工廠介面,乙個使用簡單工廠設計模式的builder類用來根據植物名或者完整類路徑獲取對應的工廠。
簡單工廠設計模式和工廠方法設計模式的差距:
1.如果構建物件的過程比較複雜,簡單工廠設計模式無法使用反射來建立物件。工廠方法設計模式可以使用反射來建立工廠。
2.所有的構建方法都在同乙個方法中,**會過長,臃腫容易出問題,不好排查。工廠方法設計模式都給拆分了,不臃腫。
3.如果要想復用**的話,需要和簡單工廠中生產的植物一模一樣,不一樣的話不能實現復用。工廠方法設計模式下如果要增加新植物,或者修改植物,只需要增加乙個實現了工廠介面的工廠類。
設計模式 簡單工廠 工廠方法 抽象工廠方法模式
簡介 工廠方法模式分為 簡單工廠模式 工廠方法模式 抽象工廠方法模式 簡單工廠模式是屬於建立型模式,又叫做靜態工廠方法 static factory method 模式,但不屬於23種gof設計模式之一。簡單工廠模式是由乙個工廠物件決定建立出哪一種產品類的實 uml圖示例 public class ...
設計模式 簡單工廠 工廠方法和抽象工廠
簡單工廠 工廠方法和抽象工廠三種設計模式都用來幫助我們將物件的例項化部分抽取出來,優化系統結構,在開發中經常使用。三者既有區別,也有聯絡,今天來對這三種設計模式做乙個簡單的記錄。一般來說,利用乙個靜態方法,即將createproduct方法設定為static,將我們所需要的產品型別傳入函式引數中 t...
C 設計模式 簡單工廠和工廠方法
ifndef factorymethod h define factorymethod h include 說明 工廠類模式通常由工廠類和產品類組成,在工廠類中提供建立建立產品的介面,客戶端使用工廠類建立具體的產品。工廠類模式包含簡單工廠模式,工廠方法模式和抽象工廠模式。本節介紹簡單工廠和工廠方法。...