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
}
Go
proxy_test.go
package proxy
import"testing"funcTestProxy(t *testing.T){var sub Subject
sub =&Proxy{}
res := sub.Do()if res !="pre:real:after"{
t.Fail()}}