設計模式之工廠模式

2021-09-24 06:21:05 字數 2628 閱讀 5166

二.簡單工廠模式

三.工廠方法模式

四. 抽象工廠模式

在基類中定義建立物件的乙個介面,讓子類決定例項化哪個類。工廠方法讓乙個類的例項化延遲到子類中進行。

簡單工廠模式(****** factory)

• 用來生產同一等級結構中的任意產品。(對於增加新的產品,需要修改已有**)

又稱靜態工廠方法模式(static factory method pattern)

工廠方法模式(factory method)

• 用來生產同一等級結構中的固定產品。(支援增加任意產品)

又稱多型性工廠(polymorphic factory)模式或虛擬構造子(virtual constructor)模式

抽象工廠模式(abatract factory)

• 用來生產不同產品族的全部產品。(對於增加新的產品,無能為力;支援增加產品族)

又稱工具箱(kit 或toolkit)模式

(1)spring中通過getbean(「」)獲取bean;

(2)jdbc中connection物件的獲取;

(3)xml解析時的documentbuilde***ctory建立解析器物件

(4)反射中class物件的newinstance()

(5)hibernate/mybatis中sessionfactory建立session

(1) 將選擇實現類、建立物件統一管理和控制。從而將呼叫者跟我們的實現類解耦。

(2) 降低**重複: 如果建立某個物件的過程都很複雜,需要一定的**量,而且很多地方都要用到,那麼就會有很多的重複**。

(3) 降低維護成本 :由於建立過程都由工廠統一管理,所以發生業務邏輯變化,不需要找到所有需要建立物件b的地方去逐個修正,只需要在工廠裡修改即可,降低維護成本

用來生產同一等級結構中的任意產品。(對於增加新的產品,需要修改已有**)

它違背了開放-封閉原則(雖然可以通過反射的機制來避免 。因為每次你要新新增乙個功能,都需要在生switch-case 語句(或者if-else 語句)中去修改**,新增分支條件。

ocp(開閉原則,open-closed principle):乙個軟體的實體應當對擴充套件開放,對修改關閉。

(1)需要建立的物件較少。

(2)客戶端不關心物件的建立過程。

工廠(factory)角色 :簡單工廠模式的核心,它負責實現建立所有例項的內部邏輯。工廠類可以被外界直接呼叫,建立所需的產品物件。

抽象產品(product)角色 :簡單工廠模式所建立的所有物件的父類,它負責描述所有例項所共有的公共介面。

具體產品(concrete product)角色:簡單工廠模式的建立目標,所有建立的物件都是充當這個角色的某個具體類的例項。

package com.bjsxt.******factory;

public class ca***ctory else if("賓士".equals(type))

return c; }}

public class ca***ctory

public static car createbenz()

}

工廠方法模式應該是在工廠模式家族中是用的最多模式,一般專案中存在最多的就是這個模式。

工廠方法模式是簡單工廠的僅一步深化, 在工廠方法模式中,我們不再提供乙個統一的工廠類來建立所有的物件,而是針對不同的物件提供不同的工廠。也就是說 每個物件都有乙個與之對應的工廠 。

乙個類不知道它所需要的物件的類:在工廠方法模式中,客戶端不需要知道具體產品類的類名,只需要知道所對應的工廠即可,具體的產品物件由具體工廠類建立;客戶端需要知道建立具體產品的工廠類。

乙個類通過其子類來指定建立哪個物件:在工廠方法模式中,對於抽象工廠類只需要提供乙個建立產品的介面,而由其子類來確定具體要建立的物件,利用物件導向的多型性和黎克特制將建立物件的任務委託給多個工廠子類中的某乙個,客戶端在使用時可以無需關心是哪乙個工廠子類建立產品子類,需要時再動態指定,可將具體工廠類的類名儲存在配置檔案或資料庫中。

抽象工廠(abstract factory)角色:是工廠方法模式的核心,與應用程式無關。任何在模式中建立的物件的工廠類必須實現這個介面。

抽象產品(abstractproduct)角色 :工廠方法模式所建立的物件的超型別,也就是產品物件的共同父類或共同擁有的介面。

具體產品(concrete product)角色 :這個角色實現了抽象產品角色所定義的介面。某具體產品有專門的具體工廠建立,它們之間往往一一對應

在工廠方法模式中,其實我們有乙個潛在意識的意識。那就是我們生產的都是同一類產品。抽象工廠模式是工廠方法的僅一步深化,在這個模式中的工廠類不單單可以建立一種產品,而是可以建立一組產品。

抽象工廠模式是工廠方法模式的公升級版本,在有多個業務品種、業務分類時,通過抽象工廠模式產生需要的物件是一種非常好的解決方式。

乙個類不知道它所需要的物件的類用來生產不同產品族的全部產品。(對於增加新的產品,無能為力;支援增加產品族)

與工廠方法模式類似

抽象工廠是生產一整套有產品的(至少要生產兩個產品),這些產品必須相互是有關係或有依賴的,而工廠方法中的工廠是生產單一產品的工廠。

設計模式 設計模式之工廠模式

工廠方法模式 建立模式 使用場景?作用?形態?場景 大量類似的實體類 要建立的實體類都是同一本質的東西 披薩 有部分類似功能 準備 烘烤 切法 實現方式不一樣 準備的材料不同 烘烤時間不同 切法不同 將繁瑣複雜的建立類的過程聚集在一起,有序清晰 把具體例項化的過程從客戶 中抽離 作用 1 將建立物件...

c 設計模式 之 工廠模式之 工廠模式

1 uml類圖 實現和依賴關係 實現 sportfactory jeepfactory hatchbackfactory 實現 ifactory 介面 sportcar jeepcar hatchbackcar 實現 icar 介面 依賴 ifactory 依賴 icar sportfactory ...

設計模式 工廠模式之簡單工廠模式

定義 由乙個工廠物件 工廠類 來指定建立某乙個產品類的例項。使用場景 客戶端只需傳入指定的引數即可,工廠類負責建立的物件較少 因為指定了傳入的引數 介面類 本想用iphone命名的,見諒 public inte ce phone實現介面類 public class huaweiphone imple...