《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
现在我们了解了数据结构的分类和用到的设计模式,让我们继续看看算法的表示。
下一篇:持续更新中…
上一篇: