结构型:四. 代理模式
代理模式是什么
代理模式是一种结构型设计模式, 让你能提供真实服务对象的替代品给客户端使用。 代理接收客户端的请求并进行一些处理 (访问控制和缓存等), 然后再将请求传递给服务对象。
为什么用代理模式
在某些情况下客户类不想或者不能访问目标对象,这时候就可以使用代理类访问。
代理模式怎么实现
package proxy
//代理模式
type Subject interface {
Do() string
}
type RealSubject struct{}
func (RealSubject) Do() string {
return "real"
}
type Proxy struct {
real RealSubject
}
func (p Proxy) Do() string {
var res string
// 在调用真实对象之前的工作,检查缓存,判断权限,实例化真实对象等。。
res += "pre:"
// 调用真实对象
res += p.real.Do()
// 调用之后的操作,如缓存结果,对结果进行处理等。。
res += ":after"
return res
}
优点
- 代理模式在客户端和目标对象之间起到一个中介作用和保护作用。
- 代理模式可以扩展目标对象的功能。
- 代理模式将目标对象和客户端分类在一定程度上降低了系统的耦合度。增加了程序的可扩展性。
缺点
- 代理模式会造成系统类的增加,增加了系统的复杂度。