返回
设计模式(Swift) - 2.单例模式、备忘录模式和策略模式
IOS
2024-02-19 12:55:53
单例模式、备忘录模式和策略模式:Swift 中的实用设计模式
单例模式
单例模式确保了一个类只有一个实例,并提供了一个全局访问点。它常用于管理资源,例如数据库连接或全局变量。
在 Swift 中,可以通过两种方法实现单例模式:
- 全局变量:
class Singleton {
static let shared = Singleton()
private init() {}
}
- 静态属性:
class Singleton {
static var shared: Singleton {
get {
if sharedInstance == nil {
sharedInstance = Singleton()
}
return sharedInstance!
}
}
private init() {}
private static var sharedInstance: Singleton?
}
备忘录模式
备忘录模式存储一个对象的当前状态,以便在需要时还原到该状态。它常用于保存复杂对象的快照或实现撤销操作。
在 Swift 中,备忘录模式可以通过以下两种方式实现:
- 归档/解归档:
class Memento {
private let state: String
init(state: String) {
self.state = state
}
func getState() -> String {
return state
}
}
class Originator {
private var state: String
init(state: String) {
self.state = state
}
func setState(state: String) {
self.state = state
}
func saveState() -> Memento {
return Memento(state: state)
}
func restoreState(memento: Memento) {
state = memento.getState()
}
}
- 快照:
class Memento {
private let snapshot: [String: Any]
init(snapshot: [String: Any]) {
self.snapshot = snapshot
}
func getSnapshot() -> [String: Any] {
return snapshot
}
}
class Originator {
private var state: [String: Any]
init(state: [String: Any]) {
self.state = state
}
func setState(state: [String: Any]) {
self.state = state
}
func saveState() -> Memento {
return Memento(snapshot: state)
}
func restoreState(memento: Memento) {
state = memento.getSnapshot()
}
}
策略模式
策略模式允许算法的行为在不改变客户端的情况下发生变化。它通过分离算法和客户端来实现,使客户端能够动态地选择不同的算法。
在 Swift 中,策略模式可以通过以下两种方式实现:
- 枚举:
enum Strategy {
case a, b, c
}
class Context {
private var strategy: Strategy
init(strategy: Strategy) {
self.strategy = strategy
}
func executeStrategy() {
switch strategy {
case .a:
// Do something
break
case .b:
// Do something else
break
case .c:
// Do something else
break
}
}
}
- 闭包:
typealias Strategy = (Int, Int) -> Int
class Context {
private var strategy: Strategy
init(strategy: Strategy) {
self.strategy = strategy
}
func executeStrategy(a: Int, b: Int) -> Int {
return strategy(a, b)
}
}
这些模式的应用
这些模式在现实世界的应用程序中有很多用处:
- 单例模式可用于管理应用程序范围的设置或数据,如用户偏好或数据库连接。
- 备忘录模式可用于实现撤销/重做功能、保存和加载游戏状态或跟踪对象的历史记录。
- 策略模式可用于支持算法的动态选择,例如根据用户偏好选择排序算法或根据条件选择不同的业务逻辑。
结论
单例模式、备忘录模式和策略模式是 Swift 中强大的设计模式,可以显著提高应用程序的可维护性、可重用性和可扩展性。通过理解和利用这些模式,开发人员可以创建健壮且灵活的应用程序。
常见问题解答
-
为什么要使用单例模式?
- 确保只有一个类的实例,并提供一个全局访问点。
-
备忘录模式如何与快照模式不同?
- 归档/解归档模式将整个对象的状态存储为二进制数据,而快照模式将对象的状态存储为键值对字典。
-
策略模式什么时候有用?
- 当需要动态更改算法的行为而不需要修改客户端代码时。
-
单例模式的缺点是什么?
- 可能会导致全局状态的过度使用,并使单元测试变得困难。
-
备忘录模式的优势是什么?
- 允许在不影响原始对象的情况下回滚对象的状态,并且可以实现轻量级撤销/重做功能。