GOF 三 簡單工廠及工廠模式 推薦

2021-09-26 09:52:00 字數 3102 閱讀 9367

工廠模式:顧名思義,工廠模式提供了一種建立物件的最佳方式,所以是建立型

優點:

缺點:

簡單工廠
實際上簡單工廠並不是一種設計模式,更像是一種從面向過程到物件導向的轉變思路(就像c到c++),但是有助於理解工廠模式,這裡就簡單提一下。

先寫具體的產品類,這個在工廠模式也會用到,算是二者的相同之處

產品的統一介面

**如下:

public

inte***ce

computer

兩個具體的實現類**如下:

public

class

lenovo

implements

computer

@override

public

void

getname()

}

public

class

macpro

implements

computer

@override

public

void

getname()

}

我們需要的產品圖紙畫好了,接下來就是按照圖紙生產了。

public

class

******factory

return null;

}}

測試**如下:

public

static

void

main

(string[

] args)

簡單工廠通過switch 來建立所需要的具體產品。乙個兩個還好,100個誰扛得住,而且不夠直白,維護起來也很困難。

而工廠模式可以有效的消除掉過多的switch。

具體的產品圖紙與上面一樣,乙個介面computer,兩個實現lenovomacpro

工廠模式令每一種圖紙(指的是產品類),都需要乙個廠家進行一對一的加工建立。

要先定義乙個抽象工廠,統一一下每個工廠的工作任務,每個工廠都幹同樣的工作(比如都進行組裝電腦或者都進行加工零件,不過生產的品牌或者零件樣式不同罷了),這樣容易統一排程。

uml的相關知識,可以訪問我的另外一篇博文

工廠的介面方法(每個工廠的工作任務)【對應圖中的creator】**如下:

public

inte***ce

factory

lenovo對應的工廠【對應圖中的concretecreator】**如下:

/**

* @description:

* 富士康 生產lenovo

*/public

class

foxconnfactory

implements

factory

}

macpro對應的工廠【對應圖中的concretecreator】**如下:

/**

* @description:

* 和碩 生產macpro

*/public

class

heshuofactory

implements

factory

}

這兩家都乾造電腦的活,不過生產的品牌不同而已。

這裡的測試**用到了黎克特制代換原則

父類的引用指向子類的物件例項【factory foxconn = new foxconnfactory();】

之前的**中foxconnfactoryimplementsfactory, factory是父類 foxconnfactory是子類(這裡用的是介面,如果把factory定義成abstract,然後foxconnfactoryextendsfactory是一樣的)

測試**如下:

public

static

void

main

(string[

] args)

測試結果

初始化了lenovo電腦

聯想:只能聯想,不敢真想

初始化了macpro電腦

mac: 用用air就行了,用什麼pro

從測試方法可知,每次增加乙個產品類,就要寫乙個對應的工廠,產品一多就非常難受了。工廠模式中乙個工廠就只能建立一種產品,這也是工廠模式的侷限性,而抽象工廠模式就可以解決這一問題。如果感興趣,可以看一下我關於抽象工廠的文章

非常重要:工廠模式到這就講完了,如果有心,可以再看一下標題下的文字內容,結合uml圖仔細再回味一下工廠模式,相信你可以理解的更深刻,記得更牢固。

擴充套件練習: 利用「工廠模式+反射+配置檔案」來實現解耦

**已經上傳到git:訪問

Gof 抽象工廠模式

繼續打卡設計模式 今天聊一下抽象工廠模式 依然回到我們訂購披薩的需求 我們現在依然存在北京的 希臘 乳酪 胡椒三種口味 以及倫敦 希臘 乳酪 胡椒三種口味 學習抽象工廠一定先了解一下簡單工廠模式 那麼現在我們看看二者的區別在 首先我們需要有乙個pizza的基類 author 德鑫 descripti...

簡單工廠模式(三)

工廠模式,就是負責生成其他物件的類或方法。比如,我們有一些類,它們都繼承自交通工具類 inte ce vehicle class carimplements vehicle class ship implements vehicle class aircraft implements vehicle...

工廠模式及簡單的工廠模式詳解

實現了創造者和呼叫者的分離 例項化物件用工廠方法代替new操作 將選擇實現類 建立物件統一管理和控制,從而將呼叫者跟我們的實現類解耦 簡單工廠模式用來生產同一等級結構中的任意產品。對於增加新的產品,需要修改已有 工廠方法模式用來生產同一等級結構中的固定產品。支援增加任意產品 抽象工廠模式用來生產不同...