設計模式之死磕工廠模式(原創)

2021-09-20 01:56:15 字數 1989 閱讀 6963

工廠模式(factory pattern)是開發中比較常用的設計模式之一。這種型別的設計模式屬於建立型模式(關於建立型模式的概念,可以參考 設計模式概念與簡介 ,簡單點理解就是建立物件的模式,比如使用頻率最高的單例模式就是建立型模式的一種)。其中工廠模式仔細區分的話,可以分為三種,分別是簡單工廠模式、工廠方法模式以及抽象工廠模式(後面的兩種模式都是基於第一種模式進行的),本篇文章主要學習的是簡單工廠模式(簡單工廠模式一般稱之為工廠模式)

什麼是工廠模式?

我們在建立物件時不會對客戶端直接暴露建立邏輯,而是通過使用乙個共同的介面根據不同的條件來指向具體想要建立的物件。

為什麼要使用工廠模式?

比如,我現在想要去英雄**購買英雄(去商場買衣服、去餐館吃飯也是同樣的道理),首先每個英雄要耗費的金幣不一樣,姑且我不管這個英雄是怎麼設計的,只需交付不同的錢,購買不同的英雄即可。不同的錢,購買不同的英雄在**層面上理解就是,在不同的條件下建立不同的例項物件。(注意:這個不同的條件是外部呼叫的)那麼我現在只要交付具體的錢(也就是區分不同的條件)即可從**(也就是工廠)獲取我想要的英雄。

工廠模式的優點?

a:使用工廠模式的優點在於乙個呼叫者想建立乙個物件,只要知道其名稱(也就是不同的標籤)就可以在工廠獲取具體的物件

b:擴充套件性強,如果想增加乙個產品(也就是具體的物件),只要擴充套件工廠類就可以(也就是增加不同的標籤,增加不同標籤所對應的物件)。

c: 遮蔽產品的具體實現,呼叫者只關心產品的介面、無需關心內部實現。

開始編碼:

英雄的行為規範

那麼,有了這個英雄的行為規範,就可以定義具體的英雄了(也就是實現heros介面的子類)

艾希

易大師

提莫上面一口氣定義了三個英雄,定義完英雄以後,下面就可以開始我們的工廠模式核心了。

既然是工廠模式,那麼這個工廠我們可以這樣理解:在乙個地方統一管理產品,但是這些生產的產品肯定有不同的標籤(一般是id)來區分產品是那一條生產線的。如果不區分產品那如果出了問題也難以快速定位。那麼,這個不同的標籤在**中該如何實現,簡單點思考就是字串或者數字等等的不同,於是乎,我們就有了下面的**:

工廠模式

紅色矩形代表的就是:上面說到的 「 不同的標籤 」

藍色矩形代表的就是:根據不同的標籤,返回不同的子類物件(因為這些物件都實現了heros介面)

寫完這個工廠類以後,我們就可以使用這個工廠類進行測試了:

測試工廠類

測試結果如下:

測試結果

工廠模式的內容和使用基本就結束了。上面說到,簡單工廠模式是工廠方法模式和抽象工廠模式的基礎,後續的博文也會推出這兩篇文章:

工廠方法模式

總結:

個人對工廠模式的理解就一句話:我們不生產水,我們只是大自然的搬運工。

因為生產水的細節隱藏在內部實現,所以我們不用管;大自然,就可以理解為這裡提到的工廠;搬運工,就可以理解在工廠裡面根據不同的標籤去獲取例項物件。

如果這篇文章對你有幫助,希望各位看官留下寶貴的star,謝謝。

設計模式之死磕裝飾器模式(原創)

前言 在談論裝飾器模式之前,先談乙個筆者曾經遇到過的問題。遊戲sdk 對遊戲sdk開發不了解的話可以參考android遊戲sdk詳解 這篇文章 分為兩種,一種是渠道sdk 渠道sdk這個概念可以參考剛才的文章 還有一種叫聚合sdk。那麼,什麼是聚合sdk?簡單點理解聚合sdk,其實就是把各個渠道同功...

原創 設計模式 簡單工廠模式

從設計模式的型別上來說,簡單工廠模式是屬於建立型模式,又叫做靜態工廠方法 static factory method 模式,但不屬於23種 gof設計模式之一。簡單工廠模式是由乙個工廠物件決定建立出哪一種產品類的例項。簡單工廠模式是工廠模式家族中最簡單實用的模式,可以理解為是不同工廠模式的乙個特殊實...

設計模式 工廠模式 抽象工廠模式

建立物件時不會對客戶暴露建立邏輯,並且通過使用乙個共同的介面來指向建立的物件。sept1 建立乙個公共介面,將要對外開放的方法在這裡定義。sept2 建立實現介面的類,用即實現對外開放的類的方法 sept3 建立工廠,提供乙個get方法,這個方法提供返回實現類的物件 建立選擇 sept4 使用,建立...