我们一起来读书吧 关注:159贴子:3,357
  • 0回复贴,共1

设计模式-可复用面向对象软件的基础 4.7~5.1节

只看楼主收藏回复

4.7 PROXY代理模式-对象结构型模式
Proxy代理模式,通常是指创建一个代理对象来控制对另一个对象的访问。
5.1 Chain Of Responsibility (职责链)-对象行为型模式
责任链模式通过将请求的发送者和接收者解耦,使得发送者不需要知道哪个接收者会处理请求,接收者也不知道请求的发送者是谁。这种解耦提高了系统的灵活性和可扩展性。
使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将多个对象连成一条链,并沿着这条链发送请求,直到有一个对象处理它为止。
Proxy eg:
在这个例子中,Data是被代理的结构体,实现了DataInterface接口。DataProxy是代理,它封装了对Data实例的访问。通过在DataProxy中添加额外的逻辑,你可以控制对Data实例的访问,例如权限检查、日志记录等。
package main
import "fmt"
// 定义一个接口
type DataInterface interface {
GetData() int
SetData(int)
}
// 被代理的结构体
type Data struct {
value int
}
// 实现接口
func (d *Data) GetData() int {
return d.value
}
func (d *Data) SetData(val int) {
d.value = val
}
// Proxy结构体
type DataProxy struct {
data *Data
}
// 通过Proxy设置数据
func (p *DataProxy) SetData(val int) {
// 在这里可以添加额外的逻辑
p.data.SetData(val)
}
// 通过Proxy获取数据
func (p *DataProxy) GetData() int {
// 在这里可以添加额外的逻辑
return p.data.GetData()
}
func main() {
// 创建Data的实例
data := &Data{}
// 创建Data的Proxy
proxy := &DataProxy{data: data}
// 通过Proxy设置数据
proxy.SetData(10)
// 通过Proxy获取数据
value := proxy.GetData()
fmt.Println("Value through proxy:", value) // 应该输出10
}


1楼2024-10-18 09:43回复