Swift World:设计模式-抽象工厂

今天我们将讨论抽象工厂模式。 它处理更复杂的用例。 众所周知,轿车家族拥有紧凑,中型和全尺寸的不同车型.SUV具有相同的类别。 假设我们有两个工厂。 一种侧重于紧凑型,另一种侧重于全尺寸。 如下图所示,工厂A生产紧凑型轿车和紧凑型SUV。 B厂生产全尺寸轿车和SUV。

让我们开始编码。 这是不同尺寸的轿车和越野车。 它们都符合各自的抽象接口。

protocol Sedan { 
func drive ()
}
 class CompactSedan : Sedan { 
func drive () {
print ("drive a compact sedan")
}
}
 class MidSizeSedan : Sedan { 
func drive () {
print ("drive a mid-size sedan")
}
}
 class FullSizeSedan : Sedan { 
func drive () {
print ("drive a full-size sedan")
}
}
 protocol SUV { 
func drive ()
}
 class CompactSUV : SUV { 
func drive () {
print ("drive a compact SUV")
}
}
 class MidSizeSUV : SUV { 
func drive () {
print ("drive a mid-size SUV")
}
}
 class FullSizeSUV : SUV { 
func drive () {
print ("drive a full-size SUV")
}
}

接下来是我们的工厂。 他们都可以生产轿车和SUV。 A是紧凑型,B是全尺寸。

 protocol Factory { 
func produceSedan () -> Sedan
func produceSUV () -> SUV
}
 class FactoryA : Factory { 
func produceSedan () -> Sedan {
return CompactSedan ()
}
 func produceSUV () -> SUV { 
return CompactSUV ()
}
}
 class FactoryB : Factory { 
func produceSedan () -> Sedan {
return FullSizeSedan ()
}
 func produceSUV () -> SUV { 
return FullSizeSUV ()
}
}

好吧,让我们现在生产轿车和SUV。

 let factoryA = FactoryA() 
let compactSedan = factoryA.produceSedan()
let compactSUV = factoryA.produceSUV()
compactSedan.drive()
compactSUV.drive()
 let factoryB = FactoryB() 
let fullsizeSedan = factoryB.produceSedan()
let fullsizeSUV = factoryB.produceSUV()
fullsizeSedan.drive()
fullsizeSUV.drive()

另一个用例是为我们的UI设置不同的主题。 主题涉及许多元素,如标签,按钮,背景等。但是在特定主题中,每种元素都有其样式。 请尝试抽象工厂来构建此模式。

如果您想学习其他创作模式,请在此处列出。

  • Swift World:设计模式-简单工厂
  • Swift World:设计模式-工厂方法
  • Swift World:设计模式-Singleton
  • Swift World:设计模式-生成器