天天看點

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

工廠模式(Factory Pattern)是開發中比較常用的設計模式之一。這種類型的設計模式屬于建立型模式(關于建立型模式的概念,可以參考 

設計模式概念與簡介

 ,簡單點了解就是建立對象的模式,比如使用頻率最高的單例模式就是建立型模式的一種)。其中工廠模式仔細區分的話,可以分為三種,分别是簡單工廠模式、工廠方法模式以及抽象工廠模式(後面的兩種模式都是基于第一種模式進行的),本篇文章主要學習的是簡單工廠模式(簡單工廠模式一般稱之為工廠模式)

什麼是工廠模式?

我們在建立對象時不會對用戶端直接暴露建立邏輯,而是 

通過使用一個共同的接口根據不同的條件來指向具體想要建立的對象。 為什麼要使用工廠模式?

比如,我現在想要去英雄商城購買英雄(去商場買衣服、去餐館吃飯也是同樣的道理),首先每個英雄要耗費的金币不一樣,姑且我不管這個英雄是怎麼設計的,隻需傳遞不同的錢,購買不同的英雄即可。不同的錢,購買不同的英雄在代碼層面上了解就是,在不同的條件下建立不同的執行個體對象。(注意:這個不同的條件是外部調用的)那麼我現在隻要傳遞具體的錢(也就是區分不同的條件)即可從商城(也就是工廠)擷取我想要的英雄。

工廠模式的優點?

A:使用工廠模式的優點在于一個調用者想建立一個對象,隻要知道其名稱(也就是不同的标簽)就可以在工廠擷取具體的對象

B:擴充性強,如果想增加一個産品(也就是具體的對象),隻要擴充工廠類就可以(也就是增加不同的标簽,增加不同标簽所對應的對象)。

C: 屏蔽産品的具體實作,調用者隻關心産品的接口、無需關心内部實作。

開始編碼:

首先,根據上面提到的場景,我們知道所有的聯盟英雄都有被購買的權利和使用技能的義務,那麼,我們定義一個接口讓所有在商城内的英雄都遵循這個行為規範,于是就有了下面的代碼:

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

英雄的行為規範

那麼,有了這個英雄的行為規範,就可以定義具體的英雄了(也就是實作Heros接口的子類)

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

艾希

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

易大師

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

提莫

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

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

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

工廠模式

紅色矩形代表的就是:上面說到的 “ 不同的标簽 ”

藍色矩形代表的就是:根據不同的标簽,傳回不同的子類對象(因為這些對象都實作了Heros接口)

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

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

測試工廠類

測試結果如下:

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

測試結果

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

工廠方法模式 總結:

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

因為生産水的細節隐藏在内部實作,是以我們不用管;大自然,就可以了解為這裡提到的工廠;搬運工,就可以了解在工廠裡面根據不同的标簽去擷取執行個體對象。

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

Ps:著作權歸作者所有,轉載請注明作者, 商業轉載請聯系作者獲得授權,非商業轉載請注明出處(開頭或結尾請添加轉載出處,添加原文url位址),文章請勿濫用,也希望大家尊重筆者的勞動成果。

繼續閱讀