0%

比较工厂设计模式

        使用Swift语言了解静态工厂,简单工厂,工厂方法和抽象工厂之间的区别。

        我认为对所有工厂模式进行汇总比较会很高兴,所以这里是你应该了解的所有内容。 构造它们相对简单,在本示例中,我将使用一些用 Swift 编程语言编写的 UIColor 来向你展示基础知识。 🧙‍♂️

静态工厂

  • 没有单独的工厂类别
  • 命名静态方法来初始化对象
  • 可以具有缓存并可以返回子类型
1
2
3
4
5
6
7
extension UIColor {
static var primary: UIColor { return .black }
static var secondary: UIColor { return .white }
}

let primary = UIColor.primary
let secondary = UIColor.secondary

简单工厂

  • 一个工厂类
  • 枚举( switch-case )出其中的实例对象
  • 封装各种代码
  • 如果列表太大,请使用工厂方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class ColorFactory {
enum Style {
case primary
case secondary
}

func create(_ style: Style) {
switch style
case .primary:
return .black
case .secondary:
return .white
}
}
let factory = ColorFactory()
let primary = factory.create(.primary)
let secondary = factory.create(.secondary)

工厂方法

  • 多个(解耦的)工厂类
  • 每个实例的工厂方法
  • 为工厂创建一个简单的协议
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
protocol ColorFactory {
func create() -> UIColor
}

class PrimaryColorFactory: ColorFactory {
func create() -> UIColor {
return .black
}
}

class SecondaryColorFactory: ColorFactory {
func create() -> UIColor {
return .white
}
}

let primaryColorFactory = PrimaryColorFactory()
let secondaryColorFactory = SecondaryColorFactory()
let primary = primaryColorFactory.create()
let secondary = secondaryColorFactory.create()

抽象工厂

  • 结合简单的工厂和工厂方法
  • 对整个应用程序具有全局作用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
// exact same factory method pattern from above
protocol ColorFactory {
func create() -> UIColor
}

class PrimaryColorFactory: ColorFactory {
func create() -> UIColor {
return .black
}
}

class SecondaryColorFactory: ColorFactory {
func create() -> UIColor {
return .white
}
}

// simple factory pattern from above using the factory methods
class AppColorFactory: ColorFactory {

enum Theme {
case dark
case light
}

func create(_ theme: Theme) -> UIColor {
switch theme {
case .dark:
return PrimaryColorFactory().create()
case .light:
return SecondaryColorFactory().create()
}
}
}

let factory = AppColorFactory()
let primaryColor = factory.create(.dark)
let secondaryColor = factory.create(.light)

        因此,所有这些都是使用 Swift 编写的实际示例的工厂模式。 👍

坚持原创技术分享,您的支持将鼓励我继续创作!

欢迎关注我的其它发布渠道