抽象工廠方法模式(Abstract Factory Pattern)
一.什么是抽象工廠方法模式:
為創(chuàng)建一組相關(guān)或互相依賴的對(duì)象提供一個(gè)接口,而且無需指定它們的具體類锄码。
二.抽象工廠方法模式的優(yōu)點(diǎn):
1.封裝性:每個(gè)產(chǎn)品的實(shí)現(xiàn)類不是高層模塊要關(guān)心的。它不關(guān)心對(duì)象是如何創(chuàng)建出來的,這些是由工廠類負(fù)責(zé)的巍耗。
2.產(chǎn)品族類的約束為非公開的秋麸。
三.抽象工廠模式的使用場(chǎng)景:
1.編譯器無法定義創(chuàng)建對(duì)象類
2.類可以讓其子類決定在運(yùn)行期具體實(shí)例化的對(duì)象
3.封裝一組相互關(guān)聯(lián)的類的創(chuàng)建
四.Swift實(shí)現(xiàn)抽象工廠方法模式:
產(chǎn)品類:
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")
}
}
不管是黑人,白人還是黃種人炬太,它們都有男人和女人灸蟆。那么,在造人的時(shí)候就要分別造出男人和女人亲族。
工廠類:
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()
}
}
創(chuàng)建兩個(gè)工廠類炒考,分別建造男人和女人。抽象工廠類只需要根據(jù)參數(shù)返回這兩個(gè)工廠類即可霎迫。
調(diào)用:
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()