文章轉至:cainrun.github.io/14718583940…
作者感言
剛忙完就給我來一場大病, 多麼痛的領悟, 好不容易好點了, 可以整理整理知識點了~
最後: 如果你有更好的建議或者對這篇文章有不滿的地方, 請聯絡我, 我會參考你們的意見再進行修改, 聯絡我時, 請備註
工廠模式
, 如果覺得好的話, 希望大家也可以打賞一下~嘻嘻~祝大家學習愉快~謝謝~
簡介
所謂
工廠模式
其實顯示中的工廠沒啥區別, 客戶下單, 工廠負責做出產品出來交貨, 這樣子就沒了, 至於工廠裡面做了什麼東西, 怎麼實現, 我們完全不用關注, 只要知道工廠能按時交貨就可以了.
簡單工廠與抽象工廠
在工廠模式當中, 又有兩種不同的工廠模式, 分別是
簡單工廠
與抽象工廠
, 他們之前的區別也很簡單, 無非就是一個是例項
一個抽象
, 這麼說好像不太明確, 下面我們來建個工程, 看看簡單工廠
和抽象工廠
兩者之間到底有啥不一樣~
簡單工廠
首先我們把之前的那個
WorkSpace
開啟, 新建一個FactoryPattern
工程, 然後我們再來新建一個工廠類, 這次我們就拿一個汽車工廠作為例子~
接下來我們建立一個汽車的基類
BaseCar
, 還有一個協議, 這個協議是用來限制BaseCar
或者BaseCar
的子類實現一些必須實現的方法, 我這裡只是做演示, 所以BaseCar
類裡面空實現就好了, 其他的交給子類去實現.
汽車的基類我們已經有了, 現在我們來建立一個汽車工廠類, 就拿全球最大的汽車廠商通用來做例子, 在這裡我們會拿通用汽車的幾個旗下品牌來做例子, 且都繼承與
BaseCar
, 然後給他們對應做一些差異化的操作就OK了~~
現在我們來實現
Protocol
裡的方法再加一些差異化, 醬紫我們就知道到時候初始化出來的汽車是哪輛了~~ 我們先拿Buick
來做例子, 新增一個差異化方法, 然後再看看我們利用工廠模式初始化出來的物件是不是Buick
.
其他的幾個品牌車子也是同理進行就可以了, 這裡就不做演示了, 程式碼當中我會填上去, 到時候大家去下載原始碼下來看看就哦了~~
簡單工廠
到這裡就基本上搞定了, 下面就讓我們來看看什麼是抽象工廠
.
抽象工廠
其實所謂的
抽象工廠
與簡單工廠
最大的卻別, 就是把工廠類做成一個抽象的物件, 比簡單工廠
多了一層抽象層, 然後使用一個管理者去管理這些對應的廠商, 使用者可以根據自己的需求, 向不同的廠商拿貨, 這就像是超市似得, 一個類別的商品有好幾個或者是十幾個不同的廠商在供貨, 可以讓消費者, 根據自己的消費水平或者需求來選擇不同廠商的產品, 下面讓我們用程式碼說話~
新建抽象工廠目錄
在開始之前, 我們肯定要先規劃好資料夾的目錄, 以免與之前的
簡單工廠
類搞混, 下面就是我們的資料夾結構.
接下來我們就要去新建我們的
BaseFactory
以及BaseCar
, 但是這裡由於之前已經有BaseCar
這個類了, 為了區別, 我們在新建的BaseCar
前面加個字首Ab
, 醬紫就好了
宣告且實現
AbBaseFactory
的一個方法.
新建完成之後, 我們就需要繼續, 這次我們拿
長安
和廣汽
兩個廠商做例子, 車型的話, 我就隨便挑兩個, 一個是凱美瑞
, 一個是昂克賽拉
(我是隨便取的兩輛車啊, 百度一搜就出來這兩個貨了, 要怪就怪百度去吧).
完善對應的工廠
新建完這些類之後, 我們需要分別給對應的廠商新增對應的車型,
長安-馬自達
,廣汽-凱美瑞
工廠管理者
在完成了之前的工作之後, 現在我們來看看
抽象工廠
的核心, 工廠管理者(FactoryManager).
醬紫, 我們就完成了
抽象工廠
的所有步驟了, 下面讓我們來使用一下抽象工廠
.
使用抽象工廠
完成了所有步驟之後, 我們就來使用一下
抽象工廠
, 看看到底是不是我們所要的東西.
嘿嘿, 到這裡, 我們就完成了
工廠模式
的簡單工廠
和抽象工廠
了, 非常的簡單, 如果你們需要對應的文件和程式碼, 請到我的GitHub
裡, 地址就在下面
工程地址
專案地址: github.com/CainRun/Des…