今天設計模式結課了,自己才學習了一半,得加油了,近期幾門考試都是弱項,加油複習!!!今天學習的是虛擬工廠模式
虛擬工廠模式
抽象工廠模式是所有形態的工廠模式中最為抽象和最具一般性的一種形態。抽象工廠模式是指當有多個抽象角色時,使用的一種工廠模式。抽象工廠模式可以向客戶端提供乙個介面,使客戶端在不必指定產品的具體的情況下,建立多個產品族中的產品物件。根據黎克特制替換原則,任何接受父型別的地方,都應當能夠接受子型別。因此,實際上系統所需要的,僅僅是型別與這些抽象產品角色相同的一些例項,而不是這些抽象產品的例項。換言之,也就是這些抽象產品的具體子類的例項。工廠類負責建立抽象產品的具體子類的例項。
角色:
抽象工廠(abstract factory)角色:擔任這個角色的是工廠方法模式的核心,它是與應用系統商業邏輯無關的。
抽象產品(abstract product)角色:擔任這個角色的類是工廠方法模式所建立的物件的父類,或它們共同擁有的介面。
具體產品(concrete product)角色:抽象工廠模式所建立的任何產品物件都是某乙個具體產品類的例項。這是客戶端最終需要的東西,其內部一定充滿了應用系統的商業邏輯。
當每個抽象產品都有多於乙個的具體子類的時候,工廠角色怎麼知道例項化哪乙個子類呢?比如每個抽象產品
[1]角色都有兩個具體產品。抽象工廠模式提供兩個具體工廠角色,分別對應於這兩個具體產品角色,每乙個具體工廠角色只負責某乙個產品角色的例項化。每乙個具體工廠類只負責建立抽象產品的某乙個具體子類的例項。
工廠方法模式與抽象工廠模式十分相似,工廠方法模式針對的是乙個產品等級結構;而抽象工廠模式針對的是多個產品等級結構。
類圖:
例項**:
abstract class producta
abstract class productb
class concreteproducta1 : producta
}class concreteproducta2 : producta
}class concreteproductb1 : productb
}class concreteproductb2 : productb
}abstract class abstractfactroy
class concretefactory1 : abstractfactroy
public override productb createb()
}class concretefactory2 : abstractfactroy
public override productb createb()
}class program
}
在以下情況下應當考慮使用抽象工廠模式:
乙個系統不應當依賴於產品類例項如何被建立、組合和表達的細節,這對於所有形態的工廠模式都是重要的。
這個系統有多於乙個的產品族,而系統只消費其中某一產品族。
同屬於同乙個產品族的產品是在一起使用的,這一約束必須在系統的設計中體現出來。
系統提供乙個產品類的庫,所有的產品以同樣的介面出現,從而使客戶端不依賴於實現。
GO AbstractFactory 抽象工廠
模式定義 提供乙個介面,讓該介面負責建立一系列 相關或者相互依賴的物件 無需指定它們具體的類。設計模式 gof 要點總結 如果沒有對應 多系列物件構建 的需求變化,則沒有必要使用abstract factory 模式,這時候使用簡單的工廠完全可以。系列物件 指的是在某一特定系列下的物件之間相互依賴 ...
java學習日記 抽象類
抽象類 語法規則 抽象類前使用abstract關鍵字類修飾,則該類為抽象類。應用場景 a 在某些情況下,某個父類只知道子類應該包含怎樣的方法,但無法準確知道子類怎麼實現這些方法。也就是說抽象類只關注子類必須有哪些方法,而並不關注子類怎樣去實現。b 從多個具有相同特徵的子類中抽象出乙個類的模板,從而避...
日記 抽象工廠
有錯誤之處,還請提出 pragma once include string include memory include map templateclass genericfactory genericfactory const genericfactory genericfactory opera...