前言:
说到代理,不得不提一下装饰模式. 这两个模式.非常类似.
写起来几乎一样 代理类和委托类实现同一个接口. 然后实现接口.
不同的地方:
行为上有所不同.
1.装饰模式是为了扩展.而不是代理.也就是说用了装饰模式. 必然要有新的扩展.不然就不算装饰模式.
2.代理模式,不会去对原有接口做扩展.也就是不会为了代理的对象而去添加方法. 纯粹的只是代理而已.
interface Love {
fun love(): String
}
/**
* 男人
*/
class Man {
fun test() {
val matchmaker = Matchmaker()
val love = matchmaker.love()
print(love)
}
}
/**
* 媒婆
*/
class Matchmaker : Love {
private val woman = Woman()
override fun love(): String {
return woman.love()
}
}
/**
* 女人
*/
class Woman : Love {
override fun love() = "高富帅才行";
}
复制代码
还是kotlin写的舒服.哈哈 以上就是简单的代理了.
代理对象的所有方法,都是为了代理,而不是为了扩展.
代理在现实生活中,很常见. 比如,租房,vpn加速器.点外卖.等等等.
总结:
1.用装饰者,一般是为了扩展功能. 也就是装饰类会添加新的方法.来实现不改变接口扩展的逻辑.
2.代理类,代理只是为了隔离调用者与被调用者,避免直接通信.
比如用加速器.你肯定网络不好才用加速器,网络好还用加速器干嘛.是不是.
套用上一篇文章的例子.
男人+敲代码=>男人变成码农敲代码 男人+代理+码农>男人找人敲代码
也就是用代理.男人不会变成敲代码的. 但是用装饰,男人就变成了男码农. 找这两个男人都能弄出代码.但是过程就不一样了
好像说的更绕了,哈哈.
一句话:装饰是为添加功能.代理是为了控制访问.
交流群:493180098,这是个很少吹水,交流学习的群.