Swift設計模式:3.抽象工廠方法模式
抽象工廠方法模式(Abstract Factory Pattern)
一.什麼是抽象工廠方法模式:
為建立一組相關或互相依賴的物件提供一個介面,而且無需指定它們的具體類。
二.抽象工廠方法模式的優點:
1.封裝性:每個產品的實現類不是高層模組要關心的。它不關心物件是如何建立出來的,這些是由工廠類負責的。
2.產品族類的約束為非公開的。
三.抽象工廠模式的使用場景:
1.編譯器無法定義建立物件類
2.類可以讓其子類決定在執行期具體例項化的物件
3.封裝一組相互關聯的類的建立
四.Swift實現抽象工廠方法模式:
產品類:
protocol HumanColor {
func getColor()
}
protocol HumanSex {
func getSex()
}
protocol Human : HumanSex,HumanColor {
}
//黑人
class BlackHuman : Human {
func getColor() {
print("Black")
}
func getSex(){
}
}
//男性黑人
class BlackMan: BlackHuman {
override func getSex() {
print("BlackMan")
}
}
//女性黑人
class BlackFeman: BlackHuman {
override func getSex() {
print("BlackFeman")
}
}
class WhiteHuman : Human {
func getColor() {
print("White")
}
func getSex() {
}
}
class WhiteMan: WhiteHuman {
override func getSex() {
print("WhiteMan")
}
}
class WhiteFeman: WhiteHuman {
override func getSex() {
print("WhiteFeman")
}
}
class YellowHuman : Human {
func getColor() {
print("Yellow")
}
func getSex() {
}
}
class YellowMan: YellowHuman {
override func getSex() {
print("YellowMan")
}
}
class YellowFeman: YellowHuman {
override func getSex() {
print("YellowFeman")
}
}
不管是黑人,白人還是黃種人,它們都有男人和女人。那麼,在造人的時候就要分別造出男人和女人。
工廠類:
enum HumanType {
case man
case feman
}
class HumanFactory {
func CreateBlackHuman() -> Human? {
return nil
}
func CreateWhiteHuman()-> Human? {
return nil
}
func CreateYellowHuman() -> Human? {
return nil
}
static func makeHumanFactory(type:HumanType) -> HumanFactory {
switch type {
case .man:
return ManFactory()
case .feman:
return FemanFactory()
}
}
}
fileprivate class ManFactory : HumanFactory
{
override func CreateBlackHuman() -> Human? {
return BlackMan()
}
override func CreateWhiteHuman()-> Human? {
return WhiteMan()
}
override func CreateYellowHuman() -> Human? {
return YellowMan()
}
}
fileprivate class FemanFactory : HumanFactory
{
override func CreateBlackHuman() -> Human? {
return BlackFeman()
}
override func CreateWhiteHuman() -> Human? {
return WhiteFeman()
}
override func CreateYellowHuman() -> Human? {
return YellowFeman()
}
}
建立兩個工廠類,分別建造男人和女人。抽象工廠類只需要根據引數返回這兩個工廠類即可。
呼叫:
let fac = HumanFactory.makeHumanFactory(type: .man)
var human = fac.CreateBlackHuman()
human?.getColor()
human?.getSex()
human = fac.CreateWhiteHuman()
human?.getSex()
human?.getColor()
human = fac.CreateYellowHuman()
human?.getSex()
human?.getColor()
相關文章
- 設計模式之工廠方法模式|抽象工廠模式設計模式抽象
- 設計模式-簡單工廠、工廠方法模式、抽象工廠模式設計模式抽象
- 設計模式(三)抽象工廠方法模式設計模式抽象
- Java 設計模式之工廠方法模式與抽象工廠模式Java設計模式抽象
- 設計模式——抽象工廠模式設計模式抽象
- 設計模式 —— 抽象工廠模式設計模式抽象
- 設計模式-抽象工廠模式設計模式抽象
- 設計模式之工廠模式!深入解析簡單工廠模式,工廠方法模式和抽象工廠模式設計模式抽象
- 設計模式----抽象工廠設計模式抽象
- 設計模式 – 抽象工廠設計模式抽象
- 設計模式 - 抽象工廠設計模式抽象
- java設計模式–抽象工廠模式Java設計模式抽象
- Java設計模式-抽象工廠模式Java設計模式抽象
- 設計模式系列·抽象工廠模式設計模式抽象
- 設計模式(十三)抽象工廠模式設計模式抽象
- 設計模式(四)——抽象工廠模式設計模式抽象
- 設計模式學習(二)工廠模式——抽象工廠模式設計模式抽象
- C# 設計模式(1)——簡單工廠模式、工廠模式、抽象工廠模式C#設計模式抽象
- 設計模式的征途—3.工廠方法(Factory Method)模式設計模式
- golang設計模式之抽象工廠模式Golang設計模式抽象
- 設計模式系列之「抽象工廠模式」設計模式抽象
- 建立型設計模式——抽象工廠模式設計模式抽象
- 23種設計模式(抽象工廠模式)設計模式抽象
- python設計模式-抽象工廠模式Python設計模式抽象
- 大話設計模式:抽象工廠模式設計模式抽象
- C# 設計模式----抽象工廠模式C#設計模式抽象
- 【設計模式之抽象工廠】設計模式抽象
- 設計模式(三):抽象工廠設計模式抽象
- 抽象工廠模式-與-工廠方法模式區別抽象模式
- 設計模式-工廠模式二(工廠方法模式)設計模式
- Java設計模式之簡單工廠、工廠方法和抽象工廠Java設計模式抽象
- 設計模式學習(六)-抽象工廠模式設計模式抽象
- 設計模式--抽象工廠模式(Abstract Factory Pattern)設計模式抽象
- Java常用設計模式之抽象工廠模式Java設計模式抽象
- 設計模式(五)抽象工廠模式詳解設計模式抽象
- 23種設計模式之抽象工廠模式設計模式抽象
- C#設計模式(4)——抽象工廠模式C#設計模式抽象
- 設計模式-抽象工廠模式(Abstract Factory Pattern)設計模式抽象