您的位置 首页 golang

《Golang学习数据结构和算法》中文版 第8篇

《Learn Data struct ures and Algorithms with Golang》作者: Bhagvan Kommadi

代理(Proxy)

代理模式转发到真实对象并充当其他对象的接口。 代理模式 控制着一个对象的访问并提供了额外的功能。额外的功能可以与验证,授权和提供对资源敏感对象的访问权限有关。当提供额外的逻辑时,这个真实对象不需要修改。远程,智能,虚拟和保护代理都是此模式的适用场景。它也被用于提供一种用继承和对象组合方式扩展功能的替代方案。代理对象(proxy object)也被称为一种代理(surrogate),句柄(handle)或者包装器(wrapper)。

代理模式包括主题(Subject)接口,真实主题(RealSubject)类和代理(Proxy)类:

  • 主题是真实主题类和代理类的接口。
  • 真实主题对象作为Proxy类的一个引用被创建和维护。真实主题对象是资源敏感的,需要被保护的,以及昂贵的创建。RealObject[真实主题类]是一个实现IRealObject[主题]接口的类。它有一个performAction方法。
  • VirtualProxy类用来访问RealObject并调用performAction方法。

下面的代码显示了一种代理模式的实现方式:

 //main package has examples shown
// in Hands-On Data Structures and algorithms with Go book
package main

// importing fmt package
 import  (
  "fmt"
)

//IRealObject interface
type IRealObject interface {
  performAction()
}

//RealObject struct
type RealObject struct{}

//RealObject class method performAction
func (realObject *RealObject) performAction() {
  fmt.Println("RealObject performAction()")
}

//VirtualProxy struct
type VirtualProxy struct {
  realObject *RealObject
}

//VirtualProxy class method performAction
func (virtualProxy *VirtualProxy) performAction() {
  if virtualProxy.realObject == nil {
    virtualProxy.realObject = &RealObject{}
  }
  fmt.Println("Virtual Proxy performAction()")
  virtualProxy.realObject.performAction()
}

// main method
func main() {
  var object VirtualProxy = VirtualProxy{}
  object.performAction()
}  

运行以下命令:

 go run virtualproxy.go  

现在我们了解了数据结构的分类和用到的设计模式,让我们继续看看算法的表示。

下一篇:持续更新中…

上一篇:

文章来源:智云一二三科技

文章标题:《Golang学习数据结构和算法》中文版 第8篇

文章地址:https://www.zhihuclub.com/99093.shtml

关于作者: 智云科技

热门文章

网站地图