模式定义
代理模式(Proxy Pattern) :给某一个对象提供一个代 理,并由代理对象控制对原对象的引用。代理模式的英 文叫做Proxy或Surrogate,它是一种对象结构型模式。
在不改变原始类的情况下,通过引入代理类来给原始类添加功能,注意附加的功能和原始功能没有强关联
模式结构
代理模式包含如下角色:
Subject: 抽象主题角色
Proxy: 代理主题角色
RealSubject: 真实主题角色
适用环境
1.业务的非功能性需求开发
2.缓存
3.rpc 等等。。。
代码实现
package main
import "fmt"
type Ilogin interface {
Login()
}
type User struct {
Name string
}
func (u *User) Login() {
fmt.Println(u.Name, " login")
}
type UserProxy struct {
User
}
func (u *UserProxy) Login() {
fmt.Println("befor login ....")
u.User.Login()
fmt.Println("after login ....")
}
func NewUser(name string) Ilogin {
return &UserProxy{User{
Name: name,
}}
}
func main() {
NewUser("aa").Login()
}