13.Golang设计模式之代理模式

代理模式

GitHub代码链接
代理模式(Proxy Pattern)中,一个类代表另一个类的功能。

什么是代理模式

代理模式为其他对象提供一种代理,以控制对这个对象的访问。

解决了什么问题

代理模式解决了直接访问对象时带来的问题,比如直接访问的对象在远程机器上。

优点

  • 职责清晰
  • 高扩展性
  • 智能化

缺点

  • 由于在客户和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求速度变慢。
  • 实现代理模式需要额外的工作,有些代理模式实现较为复杂

代码实现

1. 实现一个Image接口

//Image 接口
type Image interface {
    Display()
}

2. 实现一个RealImage类,作为被代理类

//RealImage 原本的image类
type RealImage struct {
    FileName string
}

//NewRealImage 实例化RealImage
func NewRealImage(filename string) *RealImage {
    return &RealImage{
        FileName: filename,
    }
}

//Display RealImage实现Image接口的Display方法
func (ri *RealImage) Display() {
    fmt.Printf("Displaying %s.\n", ri.FileName)
}

3. 实现一个代理类

//MyProxyImage 代理Image类
type MyProxyImage struct {
    Realimg  *RealImage
    FileName string
}

//NewMyProxyImage 实例化代理Image类
func NewMyProxyImage(filename string) *MyProxyImage {
    return &MyProxyImage{
        FileName: filename,
    }
}

//Display 实现Image接口函数
func (pi *MyProxyImage) Display() {
    if pi.Realimg == nil {
        pi.Realimg = NewRealImage(pi.FileName)
    }
    pi.Realimg.Display()
}

上一篇

12.Golang设计模式之享元模式

下一篇

14.Golang设计模式之责任链模式

你可能感兴趣的:(13.Golang设计模式之代理模式)