模式特点:为其他对象提供一种代理以控制对这个对象的访问。
模式好处:对外部提供统一的接口方法,而代理类在接口中实现对真实类的附加操作行为,从而达到了“对修改关闭,对扩展开放”(OCP原则)
应用场景:当我们需要使用的对象很复杂或者需要很长时间去构造,这时就可以使用代理模式。
程序实例:戴利帮小菜送礼物
package main
import (
"fmt"
)
type SchoolGirl struct {
name string
}
type Proxy struct {
gg Pursuit
}
func NewProxy() *Proxy {
return &Proxy{Pursuit{"小菜", "娇娇"}}
}
func (p *Proxy) GiveDolls() {
p.gg.GiveDolls()
fmt.Println("戴利顺便放一张贺卡:祝你生日快乐!——戴利")
}
func (p *Proxy) GiveFlowers() {
p.gg.GiveFlowers()
fmt.Println("戴利顺便放一张贺卡:祝你生日快乐!——戴利")
}
func (p *Proxy) GiveChocolate() {
p.gg.GiveChocolate()
fmt.Println("戴利顺便放一张贺卡:祝你生日快乐!——戴利")
}
type GiveGift interface {
giveDolls()
giveFlowers()
giveChocolate()
}
type Pursuit struct {
name string
mm string
}
func (p *Pursuit) GiveDolls() {
fmt.Println(p.name, "送", p.mm, "洋娃娃")
}
func (p *Pursuit) GiveFlowers() {
fmt.Println(p.name, "送", p.mm, "鲜花")
}
func (p *Pursuit) GiveChocolate() {
fmt.Println(p.name, "送", p.mm, "巧克力")
}
func main() {
daili := NewProxy()
daili.GiveDolls()
daili.GiveFlowers()
daili.GiveChocolate()
}