swift 代码解释单例模式、观察者模式和代理模式 设计模式

目录

​​​​​​​1.单例模式

2.观察者模式

3.代理模式


1.单例模式

单例模式是一种创建型设计模式,它确保一个类只有一个实例,并提供全局访问点。在 Swift 中,可以使用静态变量和私有构造函数来实现单例模式。

class Singleton {
    static let shared = Singleton() // 静态变量,存储唯一实例
    
    private init() {} // 私有构造函数,防止外部创建新实例
    
    func doSomething() {
        print("Singleton is doing something")
    }
}

// 使用方式
Singleton.shared.doSomething()

2.观察者模式

观察者模式是一种行为型设计模式,它定义了一种一对多的依赖关系,使得一个对象的状态发生变化时,其相关对象会自动得到通知并更新。在 Swift 中,可以使用 NotificationCenter 来实现观察者模式。

// 定义一个主题类
class Subject {
    let name: String
    var observers: [Observer] = []
    
    init(name: String) {
        self.name = name
    }
    
    func addObserver(_ observer: Observer) {
        observers.append(observer)
    }
    
    func notifyObservers() {
        for observer in observers {
            observer.update()
        }
    }
}

// 定义观察者接口
protocol Observer {
    func update()
}

// 实现观察者类
class ConcreteObserver: Observer {
    let name: String
    
    init(name: String) {
        self.name = name
    }
    
    func update() {
        print("\(name) has been notified")
    }
}

// 使用方式
let subject = Subject(name: "Subject")
let observer1 = ConcreteObserver(name: "Observer 1")
let observer2 = ConcreteObserver(name: "Observer 2")

subject.addObserver(observer1)
subject.addObserver(observer2)

subject.notifyObservers()

3.代理模式

代理模式是一种结构型设计模式,它通过创建一个代理对象来控制对另一个对象的访问。代理对象充当原始对象的接口,在需要时将请求传递给原始对象。在 Swift 中,可以使用协议将代理模式实现为一个接口。

// 定义接口
protocol Subject {
    func request()
}

// 实现原始对象
class ConcreteSubject: Subject {
    func request() {
        print("ConcreteSubject is handling request")
    }
}

// 实现代理对象
class Proxy: Subject {
    let subject: ConcreteSubject
    
    init() {
        subject = ConcreteSubject()
    }
    
    func request() {
        subject.request()
    }
}

// 使用方式
let proxy = Proxy()
proxy.request()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值