设计模式:代理模式

代理模式即在真实类的基础上封装一层代理类,由代理类完成对真实类的调用。
以便可以在代理类中做一些额外的工作,如进行访问权限校验、保存Cache缓存等操作。

下面以”读取图片资源”为例说明代理模式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
package proxy
// 接口,代理类和真实类都要实现
type Image interface {
Get() string
}
// 真实的图片类
type RealImage struct {}
func (r *RealImage) Get() string {
return "real_image_url"
}
// 代理类
type ImageProxy struct {
realImage RealImage
}
// 由代理类进行原类的调用,从而能在原类基础上做一些操作
func (r *ImageProxy) Get() string {
var res string
// pre: 权限检查、查看是否有cache等
res += "pre:"
res += r.realImage.Get()
// after: 保存cache、格式化结果等
res += ":after"
return res
}

源码以及测试源码下载地址:https://github.com/h1z3y3/big-talk-go-design-patterns/tree/master/03_proxy

坚持原创技术分享,您的支持将鼓励我继续创作!