Go语言中的代理模式通常采用接口来实现,具体实现步骤如下:
1.定义抽象接口,声明真实对象和代理对象共同遵循的行为方法。
type Subject interface {
Request() string
}
2.定义真实对象,实现接口中的方法。
type RealSubject struct{}
func (rs *RealSubject) Request() string {
return "RealSubject Request"
}
3.定义代理对象,同时实现接口中的方法,并持有真实对象的引用。
type Proxy struct {
realSubject *RealSubject
}
func (p *Proxy) Request() string {
if p.realSubject == nil {
p.realSubject = &RealSubject{}
}
result := "Proxy prework\n"
result += p.realSubject.Request()
result += "\nProxy postwork"
return result
}
4.客户端调用,通过代理对象来完成请求。
func main() {
var sub Subject = &Proxy{}
fmt.Println(sub.Request())
}
在这个例子中,代理模式被用来隐藏真实对象的复杂性,让客户端通过代理对象来完成请求。代理对象在请求前后,还可以执行其他的操作,例如日志记录等。