簡單工廠,工廠方法,抽象方法

2022-02-25 13:42:32 字數 2657 閱讀 8313

首先:簡單工廠,工廠方法,抽象工廠三者 都屬於建立型模式.主要功能是幫助我們把物件的例項部分抽象出來.優化了系統的架構,並且增強了系統了擴充套件性.

簡單工廠模式的工廠類一般是使用靜態方法,實質是由乙個工廠類根據傳入的引數,動態的決定應該建立哪乙個產品類(這些產品類繼承自乙個父類或介面)的例項.

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

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

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

優點: 工廠類是整個模式的關鍵,包含了必要的邏輯判斷,根據外接給定的資訊,決定究竟應該建立那個具體類的物件.

通過使用工廠類,外界可以從直接建立具體產品物件的尷尬局面擺脫出來,僅僅需要負責"消費"物件就可以了.而不必管這些物件究竟如何建立及如何組織的.明確了各自的職責和權力.           缺點:由於工廠類集中了所有的例項的建立邏輯,違反了高內聚責任分配原則,將全部建立邏輯集中到了乙個工廠類中,它所能建立的類只能是事先考慮到的,如果需要新增新的類,則要改變工廠類了. 

當系統中具體產品類不斷增多的時候,可能會出現要求工廠類根據不同條件建立不同的例項的需求,這種對條件的判斷和對具體產品型別的判斷交錯在一起,很難避免模組功能的蔓延,對系統的維護和擴充套件非常不利. 

這些缺點在工廠方法模式中得到了一定的克服.

工廠類負責建立的物件比較少.

客戶只知道傳入工廠類的引數,對於如何建立物件不關心.

由於簡單工廠很容易違反高內聚責任分配原則,因此一般只在很簡單的情況下應用.

工廠方法(factory method)模式的意義是定義乙個建立產品物件的工廠介面,將實際建立工廠推遲到子類當中.核心工廠類不在負責產品的建立,這樣核心類成為乙個抽象工廠角色,僅負責具體工廠子類必須實現的介面,這樣使得工廠方法模式可以使系統在不修改具體工廠角色的情況下引進新的產品.

其實工廠方法就是簡單工廠的一種衍生,解決了許多簡單工廠模式的問題.首先實現了開-閉原則,實現了可擴充套件,其次更複雜的層次結構,可以應用於產品結果複雜的場合

工廠方法模式對簡單工廠模式進行了抽象,有乙個抽象的factory類,這個類將不再負責具體的產品生產,而是只指定了一些規範,具體的生產工作是有其子類完成的..在這個模式中,工廠類和產品類往往可以依次對應,即乙個抽象工廠對應乙個抽象產品,乙個具體工廠對應乙個具體產品.

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

具體工廠角色:這個實現抽象工廠介面的具體工廠類.包含於應用程式密切相關的邏輯.

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

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

1:對於某個產品,呼叫者清楚地知道應該使用哪個具體工廠服務,例項化該具體工廠,生產處具體的產品出來.

2:只是需要一種產品,而不想知道也不需要知道究竟是哪個工廠生產的.最終選用哪個具體工廠決定權在生產者乙方,它們根據系統的情況來例項化乙個具體的工廠返回給使用者.

抽象工廠模式實質是"提供介面,建立一系列的相關或獨立的物件,而不指定這些物件的具體類"

抽象工廠模式是工廠方法模式的公升級版本,他用來建立一組相關或者相互依賴的物件。他與工廠方法模式的區別就在於,工廠方法模式針對的是乙個產品等級結構;而抽象工廠模式則是針對的多個產品等級結構。在程式設計中,通常乙個產品結構,表現為乙個介面或者抽象類,也就是說,工廠方法模式提供的所有產品都是衍生自同乙個介面或抽象類,而抽象工廠模式所提供的產品則是衍生自不同的介面或抽象類。

在抽象工廠模式中,有乙個產品族的概念:所謂的產品族,是指位於不同產品等級結構中功能相關聯的產品組成的家族。抽象工廠模式所提供的一系列產品就組成乙個產品族;而工廠方法提供的一系列產品稱為乙個等級結構。我們依然拿生產汽車的例子來說明他們之間的區別。

優點:抽象工廠模式除了具有工廠方法模式的優點外,最主要的優點就是可以在類的內部對產品族進行約束。所謂的產品族,一般或多或少的都存在一定的關聯,抽象工廠模式就可以在類內部對產品族的關聯關係進行定義和描述,而不必專門引入乙個新的類來進行管理。

缺點:產品族的擴充套件將是一件十分費力的事情,假如產品族中需要增加乙個新的產品,則幾乎所有的工廠類都需要進行修改。所以使用抽象工廠模式時,對產品等級結構的劃分是非常重要的。

使用場景:

當需要建立的物件是一系列相互關聯或相互依賴的產品族時,便可以使用抽象工廠模式。說的更明白一點,就是乙個繼承體系中,如果存在著多個等級結構(即存在著多個抽象類),並且分屬各個等級結構中的實現類之間存在著一定的關聯或者約束,就可以使用抽象工廠模式。假如各個等級結構中的實現類之間不存在關聯或約束,則使用多個獨立的工廠來對產品進行建立,則更合適一點。

無論是簡單工廠模式,工廠方法模式,還是抽象工廠模式,他們都屬於工廠模式,在形式和特點上也是極為相似的,他們的最終目的都是為了解耦。在使用時,我們不必去在意這個模式到底工廠方法模式還是抽象工廠模式,因為他們之間的演變常常是令人琢磨不透的。經常你會發現,明明使用的工廠方法模式,當新需求來臨,稍加修改,加入了乙個新方法後,由於類中的產品構成了不同等級結構中的產品族,它就變成抽象工廠模式了;而對於抽象工廠模式,當減少乙個方法使的提供的產品不再構成產品族之後,它就演變成了工廠方法模式。

所以,在使用工廠模式時,只需要關心降低耦合度的目的是否達到了。

簡單工廠方法,工廠方法,抽象工廠方法

以大話設計模式計算器為例 簡單工廠方法是由具體執行功能類,工廠類,客戶端構成,工廠類有case語句,負責建立不同的類,客戶端呼叫工廠類裡面的工廠方法,工廠類的工廠方法根據客戶端傳進去的引數new相應的類的物件返回給客戶端,客戶端得到返回的物件用該物件初始化該物件的成員變數最後呼叫該物件的方法執行計算...

簡單工廠,工廠方法,抽象工廠

簡單工廠,工廠方法,抽象工廠都屬於設計模式中的建立型模式。其主要功能都是幫助我們把物件的例項化部分抽取了出來,優化了系統的架構,並且增強了系統的擴充套件性。本文是本人對這三種模式學習後的乙個小結以及對他們之間的區別的理解。簡單工廠 簡單工廠模式的工廠類一般是使用靜態方法,通過接收的引數的不同來返回不...

簡單工廠 工廠方法 抽象工廠

簡單工廠 乙個工廠類 根據傳入的參量決定建立出哪一種產品類的例項 直接乙個工廠類,內部通過 swith operator add類實現該介面 adddao implements dao dao的實現類 客戶端 dao dao new adddao dao.createoper 產生物件 這樣如果需要...