Go!Go!Go!设计模式-代理设计模式
零:前言
参考:
https://github.com/senghoo/golang-design-pattern/blob/master/09_proxy/proxy.go
代理模式用于延迟处理操作或者在进行实际操作前后进行其它处理。
核心原理:
所谓代理,即首先代表自己的客户做一些事情,然后再让客户出面
所以存在两种实现接口的结构体,分别扮演了两个角色:被代理者(本体) 和 代理者,
后者将前者的"实例"作为自己的一部分,在调用本体方法之前或之后会先调用代理的额外逻辑
步骤:
1. 将行为抽象出一个接口
2. 两种类分别实现该接口,一个作为被代理者,一个作为代理者
被代理者作为本体实现自己的核心业务
代理者将本体实例作为自己的一部分,实现的接口方法中除了调用核心业务外,还会做一些其他代理需要做的事情
一:样例
//1. 总接口 type Subject interface { Do() string } //2. 总结构体,即被代理的对象,实现接口要求的方法 type RealSubject struct{} func (RealSubject) Do() string { return "real" } //3.代理结构体,内置被代理对象的一个的实例; 代理也实现了总接口方法,方法内部会首先增加代理特有的工作,然后才调用被代理者的方法 type Proxy struct { real RealSubject } func (p Proxy) Do() string { var res string res += "pre:" //1)before: 在调用真实对象之前的工作,检查缓存,判断权限,实例化真实对象等。。 res += p.real.Do() //2)调用被代理对象的业务方法 res += ":after" //3)after:调用之后的操作,如缓存结果,对结果进行处理等。。 return res }