①:將物件的建立過程封裝在工廠類中,使物件複雜的建立過程與程式業務邏輯解耦
②:遮蔽產品類,使用者只需關心產品的介面,只要介面保持不變,系統中的上層模組就不需要變化(如jdbc驅動)。
當工廠類中建立物件的邏輯較為簡單且穩定時,可採用簡單工廠模式。
由於簡單工廠模式將建立邏輯都封裝在單一的方法中,因此工廠類的擴充套件只能修改其建立邏輯相關**,不易擴充套件
// 簡單工廠模式
當工廠類中建立物件的邏輯較為複雜時,可定義乙個建立物件的介面,由子類實現建立的邏輯,使用者根據需要的產品選擇對應工廠子類。(易於擴充套件,新增產品種類只需新增對應的工廠例項)
// jdbc就採用了工廠方法模式:driver類是abstractfactory類,而不同資料庫都需要實現driver並註冊到drivermanager中,driver建立的產品即為connection
// 唯一的不同是,jdbc中遍歷了所有的driver例項去判斷對應的url適用於哪種driver生成的conn.
for(driverinfo adriver : registereddrivers)
} catch (sqlexception ex) }}
}
當建立的物件,存在多個維度的區別時(產品簇),定義乙個建立物件的介面,介面的實現延申出乙個維度,而介面方法延申出另乙個維度抽象工廠模式特點:在介面方法延申的維度上,①:可以設定非公開狀態的約束②:此維度擴充套件困難
根據維度劃分的不同,可能有:
方案一:根據不同膚色建立不同的工廠,factory
方案二:根據不同性別建立不同的工廠,factory
額外新增createman()/createwoman()方法,可以根據需要,協調不同品類產品的比例(非公開狀態的約束)
設計模式 工廠模式 抽象工廠模式
建立物件時不會對客戶暴露建立邏輯,並且通過使用乙個共同的介面來指向建立的物件。sept1 建立乙個公共介面,將要對外開放的方法在這裡定義。sept2 建立實現介面的類,用即實現對外開放的類的方法 sept3 建立工廠,提供乙個get方法,這個方法提供返回實現類的物件 建立選擇 sept4 使用,建立...
設計模式 工廠設計模式
用於建立物件的介面,交給子類去實現 我們舉乙個生產nokia的例子 public abstract class nokiaphone先試定義了乙個抽象類,抽象出方法poweronphone 模擬手機開機的動作 public class nokia5200 extends nokiaphone pub...
設計模式 工廠設計模式
工廠模式分為工廠方法模式和抽象工廠模式 工廠方法模式分為 普通工廠模式,就是建立乙個工廠類,對實現了同一介面的一些類進行例項的建立。多個工廠方法模式,是對普通工廠方法模式的改進,在普通工廠方法模式中,如果傳遞的字串出錯,則不能正確建立物件,而多個工廠方法模式是提供多個工廠方法,分別建立物件。靜態工廠...