模式定义
为其他对象提供一种代理以控制(隔离,使用接口)对这个对象的访问
类图
要点总结
- “增加一层间接层”是软件系统中对许多复杂问题的一种常见解决方法,在面向对象系统中,直接使用某些对象会带来很多问题,作为间接层的proxy对象便是解决这一问题的常用手段
- 具体proxy设计模式的实现方法、实现粒度都相差很大,有些可能对单个对象做细粒度的控制,如copy-on-write技术,有些可能对组件模块提供抽象代理层,在架构层次对对象做proxy
- Porxy并不一定要求保持接口完整的一致性,只要能够实现间接控制,有时候损失一些透明性是可以接收的
Go语言代码实现
工程目录
proxy.go
package Proxy
import (
"fmt"
"strconv"
)
type ITask interface {
RentHouse(desc string, price int)
}
type Task struct {
}
func (t *Task) RentHouse(desc string, price int){
fmt.Println(fmt.Sprintf("租房子的地址%s,价钱%s,中介费%s", desc, strconv.Itoa(price), strconv.Itoa(price)))
}
type AgentTask struct {
task *Task
}
func NewAgentTask() *AgentTask{
return &AgentTask{task: &Task{}}
}
func (t * AgentTask) RentHouse(desc string, price int){
t.task.RentHouse(desc, price)
}
proxy_test.go
package Proxy
import (
"testing"
)
func TestAgentTask_RentHouse(t *testing.T) {
agent := NewAgentTask()
agent.RentHouse("北京", 8000)
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。