设计模式与软件原则 (三): 委托设计模式
2022-02-24 本文已影响0人
_浅墨_
委托设计模式(Delegation Design Pattern)
根据 Apple 的说法,“委托是一种简单而强大的模式:程序中的一个对象代表另一个对象或与另一个对象协作”。委托设计模式将责任(具体实现)移交给其它实体。
来,我们一起看一个示例:
struct Product {
var name: String
}
protocol ProductDeliveryDelegate {
func send(product: Product)
}
struct OnlineShop {
private(set) var shopName: String
private(set) var products = [Product]()
private var productDeliveryDelegate: ProductDeliveryDelegate?
init(shopName: String) {
self.shopName = shopName
let delivery = Delivery()
productDeliveryDelegate = delivery
}
mutating func add(product: Product) {
self.products.append(product)
}
func sendAllProducts() {
for product in products {
productDeliveryDelegate?.send(product: product)
}
}
}
class Delivery: ProductDeliveryDelegate {
func send(product: Product) {
print("\(product.name) sent!")
}
}
使用方法:
var onlineShop = OnlineShop(shopName: "Amazon")
onlineShop.add(product: Product(name: "MacBook Pro"))
onlineShop.add(product: Product(name: "Apple Watch"))
onlineShop.add(product: Product(name: "iMac"))
onlineShop.sendAllProducts()