1. 程式人生 > >【設計模式】工廠三兄弟

【設計模式】工廠三兄弟

前言

今天給大家帶來滿滿乾貨,不僅有工廠三兄弟,還有面向物件和麵向過程的思想,以及介面和抽象類區別,希望大家認真閱讀,滿載而歸!

簡介

工廠設計模式使用常用而且常見的面向物件設計模式,它一共有三種:

  • 簡單工廠
  • 工廠
  • 抽象工廠

這是由簡單到複雜的順序來的,其實大家只要理解了,就都很簡單!

為了方便大家理解,還是個大家舉個例子,工廠就一個箱子或集合,他裡邊包含很多個類或是方法。帶著這個思想,下邊的東西就很好理解了!

面向物件

如果你是個面向過程的電腦使用者,你就會把所有檔案都放在一個資料夾裡邊。當你需要放檔案的時候,你就只需要放在這個資料夾裡就可以了!這就體現出面向過程的優點,那就是思路比較簡單,功能實現比較快。

但是如果有一天,你需要找一個檔案的時候,你需要在茫茫多的檔案裡,找到你需要的檔案!這需要耗費大量時間和經歷,因為如果是程式設計的話,你出現bug的時候,可不是簡單瀏覽一下就能出答案的!

那麼面向物件思想的話,你需要把檔案分類,比如按檔案比較具體的格式分為word、excel等格式,根據類別放在不同的資料夾下邊,這樣,你再需要操作的時候,根據檔案的類別,就可以很快的找到它!

簡單工廠

上邊我比較形象的給大家說了一下面向過程和麵向物件!簡單工廠設計模式則是面向物件比較具體的體現!

簡單工廠屬於建立型設計模式,又叫靜態工廠設計模式,大家在我之前總結的表格裡並不能看到它,它是通過專門定義一個類來負責建立其他類的例項,被建立的例項通常具有共同的父類。

這是簡單工廠的例項程式碼

簡單工廠UML圖
這裡寫圖片描述

運算類:基類,設定三個基本屬性,負責用於傳入傳出資料
計運算元類:衍生類,可以看作是實際計算類,主要繼承運算類的屬性
運算工廠:用於判斷運算類中的資料進行的計算方式

從上圖我們可以看出簡單工廠的特點的:

  • 只有一個工廠(具體的)
  • 只能生產一種產品(抽象產品)
  • 這種產品可以有多個具體的型別

簡答工廠模式最大的優點就是:工廠類包含了邏輯判斷,根據客戶端的選擇條件動態例項化相關的類,對於客戶來說,去除了與具體產品的依賴。

工廠模式

定義一個建立物件的介面,讓子類決定例項化哪一個類。工廠方法使一個類的例項化延遲到其子類。

什麼意思呢?就是之前簡單工廠中加減乘除都在一個運算類裡邊,但是到了工廠的話,就去掉了簡單,這個時候我們需要每個計算方式都通過一個工廠的方式來包裝起來,然後吧這些工廠抽象出一個

抽象工廠!

工廠方法模式是為了克服簡單工廠模式的缺點而設計出來的,簡單工廠模式的工廠類隨著產品類的增加需要增加額外的程式碼,而工廠方法模式每個具體工廠類只完成單個例項的建立,所以它具有很好的可擴充套件性。

工廠模式UML圖
這裡寫圖片描述

優點:可以在不改變原有具體工廠的前提,增加或是修改其他計算方式!
缺點:就像之前說的那樣,你會額外”建立“那些工廠的開發量!(靈活是有代價的,現在多寫點,出問題的時候也就好解決了!)

抽象工廠

抽象工廠就是為了建立一系列相關或是相互依賴的介面,而無須指定它們的具體的類!

它主要就為了建立不同類的東西,但是不用(抽象)類來總結!就好比,小米公司,大家都知道它是製造手機的大公司,但是它還生產電腦,耳機,自行車等!所以在小米的工廠裡,會產出不同型別的東西,所以我們叫它小米公司(抽象名稱),而不是小米手機公司(具體),在小米公司裡邊有不同的車間!

抽象工廠UML圖
這裡寫圖片描述
(為了和上邊的UML圖保持一致,小編也就繼續用的這個例子,此圖可能不是很形象,但是能夠幫助理解)

區別

它們三兄弟最主要的區別,在名字中就能體現出來!
(ps:在不管是學習還是寫部落格的時候,我都會用到顧名思義這個詞,它既然叫這個名字,肯定由它的原因,前人通過它的特點總結歸納,然後給它起的名字,我們就應該好好利用,通過明顯名字看現象,在透過現象看本質,那麼我們的學習也就會如虎添翼!)

模式 特點
簡單工廠 只有一個工廠類一個生產方法,根據引數不同生產不同的產品。
工廠 每一個工廠類只負責一個產品生產,不生成其它產品。好比一條生產線只生產一個產品線。
抽象工廠 每一個工廠類提供多個方法,可以生產不同的產品。好比多條生產線可以生產多家產品。

介面和抽象類的區別

如果抽象工廠不是很能理解的話,可能是你不太清楚介面和抽象類的區別。這裡,我給大家說一下我的理解!

例子:之前我麼你說到了,檔案可以按照word、excel這些比較具體的標準分類,這樣定義的類也是比較具體的類,但是我們也可以按照它的內容分類,比如按照學習、生活、工作分類,這時候,我們需要看一些這些檔案的內容再進行分類,這樣得到的就是抽象類。抽象類裡邊自然定義的就是一些抽象方法

介面 抽象類
行為的抽象 物件的抽象
跨不同類的行為
例子:小鳥的飛翔,飛機的飛翔
同類的行為(抽象類)
例子:小鳥的飛翔,大雁的飛翔(它們都是鳥類)
先定義,並不知道子類的存在
解釋:介面就是實現定義好,等待子類去實現
通過發現子類共同點,抽象出的類,然後子類繼承重寫
解釋:通過對子類的觀察,抽象出來的不具體的類

後語

我們在學習時候,不僅僅限於一本書,或是一個視訊,我們應該博採廣益,站在多個巨人的肩膀上,我們才會看到不一樣的風景!


希望本文對您有所幫助!
有什麼不足!歡迎指正!
感覺不錯可以贊一下哦!