Chapter 2 工廠設計模式

2021-07-25 11:30:52 字數 2649 閱讀 2035

和單例設計模式一樣,工廠設計模式也是屬於建立型模式。其主要作用是抽象了物件被建立時的具體細節,對外暴露乙個建立的方法,省去使用者new乙個物件的操作。乍一看,工廠設計模式只是抽象了乙個new物件的操作。其實,實際專案中new乙個物件的邏輯比較複雜,如果這個邏輯以後被修改了,那麼之前new出來的所有物件的建立建立邏輯都會受到影響。那麼將建立物件的過程統一到一些類工廠中(簡單工廠模式只有乙個工廠),就可以將改動的**量降到最低。

工廠設計模式一般分為三種:簡單工廠(****** factory)、工廠方法(factory method)以及抽象工廠(abstract factory)。

簡單工廠模式又叫靜態工廠模式

,是工廠模式三中狀態中結構最為簡單的。其主要有乙個靜態方法,該方法接受引數,並根據引數來決定返回實現同一介面的不同類的具體物件。為了更好的說明該模式的使用,這裡用下面的例子進行說明:假設有乙個汽車工廠,該工廠生產寶馬和賓士兩種汽車。

首先抽象出乙個共同的汽車介面(其實用抽象類也是可以的),並分別定義寶馬和賓士兩個具體的都實現了該介面的汽車類:

inte***ce car {}

class bmw implements car

}class benz implements car

}

然後定義乙個簡單工廠,提供乙個靜態方法,根據輸入的汽車名生產具體的汽車:

class ******factory  else if ("benz".equals(name))  else }}

最後可以在客戶端進行測試:

public class ******factorydemo 

}

這裡只是為了演示簡單工廠模式,所以拿到建立後的物件以後並沒有進行任何的操作。測試的輸出如下:

從以上的**可以看到,簡單工廠模式的核心就是******factory對外暴露的create方法,使用者只要將需要生產的產品名傳給該方法就可以得到乙個想要的產品物件。然而,簡單工廠模式也有很多的缺點,例如,當有乙個新的產品型別出現了,這個時候想要生產該產品則必須進入create內部修改邏輯,這不僅違背了「單一職責」原則,而且使得工廠類和產品類的耦合度變得很高,不利於系統擴充套件。

簡單工廠設計模式的uml類圖如下圖所示:

為了改善簡單工廠模式的不足,又出現了工廠方法模式。該模式和簡單工廠模式的不同在於不同的產品放在了不同的工廠中去生產了。還是以上面生產汽車的例子進行說明:

汽車相關類的定義不需要進行任何變動,而工廠類也抽象出了乙個工廠介面,並定義了兩個實現了該介面的工廠類,分別用於生產寶馬和賓士:

inte***ce factory 

class bmwfactory implements factory

}class benzfactory implements factory

}

最後在客戶端進行測試:

public class factorymethoddemo 

}

這樣在新增了一種產品以後,只需要定義乙個實現了工廠介面的共產類就可以生產該新的產品。並且,就算其中乙個工廠類出了問題,其他工廠類也能正常工作,互相不受影響。

工廠方法設計模式的uml類圖如下圖所示:

首先假設現在生產兩種型號的汽車,即經典版和豪華版兩種,那麼可以抽象出這兩種汽車的介面:

inte***ce classiccar {}

inte***ce luxurycar{}

然後還是以寶馬和賓士為例,假設這兩種品牌的汽車都有經典版和豪華版兩種型號,那麼可以分別定義出具體的汽車實現類:

class classicbmw implements classiccar 

}class luxurybmw implements luxurycar

}class classicbenz implements classiccar

}class luxurybenz implements luxurycar

}

接著,抽象出乙個汽車工廠介面,該介面有兩個方法,分別對應生產經典版汽車和生產豪華版汽車的方法。而這個介面對應寶馬和賓士分別有兩個具體的實現類,這兩個具體的實現類中分別實現了生產經典版和豪華版兩種汽車的方法:

inte***ce factory 

class bmwfactory implements factory

@override

public luxurycar buildluxurycar()

}class benzfactory implements factory

@override

public luxurycar buildluxurycar()

}

最後,編寫客戶端的測試程式:

public class abstractfactorydemo 

}

抽象工廠設計模式的uml類圖如下圖所示:

簡單來說,工廠設計模式是提供一種方便的構建物件的例項,而讓使用者不用去關心構建過程中的細節和複雜過程。按照工廠和產品的抽象程度,工廠設計模式又可以分成簡單工廠模式,工廠方法模式和抽象工廠模式三種,其中工廠方法模式在實際生產環境中應用最廣泛。

《程式設計實踐》chapter2

a b c c符號與b相同 若a,b,一正一負,c a b int a b 1 若a,b,同號,c a b a b 17 10 1.7 17 10 7 取模運算 17 10 1.7 17 10 317 10 1.7 17 20 有乙個除數時 17 10 3 運算方法等於 17 10,但結果的符號與1...

資料探勘 Chapter 2

本章 資料有什麼型別的屬性或字段組成?每個屬性具有何種型別的資料值 屬性 屬性是乙個資料字段,表示資料物件的乙個特徵。機器學習文獻更傾向於使用術語 特徵 而統計學家更源於使用術語 變數 資料探勘與資料庫的專業人士一般使用術語 屬性 屬性的種類 資料的基本統計描述 資料視覺化 層次視覺化 視覺化複雜物...

C 高階程式設計 Chapter2

預定義資料型別 值型別 和 引用型別 引用型別 指向包含物件的記憶體位置 decimal 128 位精度 十進位制數表示法 不是基本資料型別,會有效能損失,專用於財務計算 byte 8 short 16 int 32 long 64 float 32位精度 double 64位精度 char 16位...