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

ShawnLee_123 · · 799 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

代理模式

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设计模式之享元模式


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:ShawnLee_123

查看原文:13.Golang设计模式之代理模式

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

799 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传