代理模式(Proxy):为其他对象提供一种代理以控制对这个对象的访问\
代理模式主要包含以下三个角色:
Subject(抽象主题角色):定义了ProxySubject 和RealSubject的共用接口ISubjectProxy,这样就在任何使用RealSubject的地方都可以使用ProxySubject
RealSubject(真实主题角色):定义了ProxySubject 所代表的真实实体
Proxy(代理主题角色):保存一个Subject的引用使得代理可以访问实体(字段组合模式),并提供一个于Subject的接口相同的接口,这样代理就可以用来替代实体
package main
import "fmt"
// Proxy 设计模式
// 定义一个代理人和被代理人的接口
type ISubjectProxy interface {
Process()
}
// 定义一个代理人struct
type RealSubject struct {
}
// 实现process接口
func (r *RealSubject) Process(){
fmt.Println("realSubject 接口")
}
// 定义一个被代理struct
type ProxySubject struct {
realSubject RealSubject
}
// 同样也实现Process 接口
func (p *ProxySubject) Process(){
// 这个处理函数中可以放一些业务逻辑性的东西
//
fmt.Println("Proxy 接口")
p.realSubject.Process()
}
// 定义一个client
type ClientApp struct{
}
func (c *ClientApp) ProcessProxy(){
fmt.Println("客户端client")
isubject := new(ProxySubject)
isubject.Process()
}
func main(){
cli := ClientApp{}
cli.ProcessProxy()
}