swift设计模式学习 - 代理模式
发布时间:2020-12-14 06:25:51 所属栏目:百科 来源:网络整理
导读:移动端访问不佳,请访问我的个人博客 设计模式学习的demo地址,欢迎大家学习交流 代理模式 代理模式为其他对象提供一种代理以控制对这个对象的访问,在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介
移动端访问不佳,请访问我的个人博客
代理模式代理模式为其他对象提供一种代理以控制对这个对象的访问,在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。 代理模式的组成
代理模式的基本实现上图是最基本的代理模式的结构图,下面将用Swift代码来实现一个基本代理模式: // 定义一个接口
protocol Subject {
func request()
}
class RealSubject: Subject {
func request() {
print("真实的请求")
}
}
class Proxy: Subject {
// 真实的对象
var realSubject: RealSubject?
func request() {
realSubject?.request()
}
}
以上是一个最基本的代理模式的构成,这样可以用 代理模式解决实际问题(快递与淘宝卖家的关系)在生活中很多地方存在着代理模式,比如淘宝卖家与快递的问题,我们买东西需要淘宝卖家进行配送,但是其实他们并没有配送的功能,实际上是由快递公司进行的配送,淘宝就相当于快递公司的代理,买家也不用关心淘宝卖家是怎么送货过来的,下面是大概的实现方式: // 定义一个配送的接口
protocol Deliver {
var goodsName: String { get }
func deliverGoods()
}
// 快递公司继承配送的接口
class Express: Deliver {
var goodsName: String
init(goodsName: String) {
self.goodsName = goodsName
}
func deliverGoods() {
print("由顺丰快递配送(goodsName)")
}
}
// 淘宝卖家也继承配送的接口
class Taobao: Deliver {
// 实际上是由快递公司配送
var express: Express
var goodsName: String
init(goodsName: String) {
express = Express(goodsName: goodsName)
self.goodsName = goodsName
print("买了一个(goodsName)")
}
func deliverGoods() {
express.deliverGoods()
}
}
下面我们使用一下以上代码看看: let tb = Taobao(goodsName: "电脑")
tb.deliverGoods()
下面是打印结果: 买了一个电脑 由顺丰快递配送电脑 代理模式的优点
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |