模式定义

为其他对象提供一种代理以控制(隔离,使用接口)对这个对象的访问

类图

要点总结

  • “增加一层间接层”是软件系统中对许多复杂问题的一种常见解决方法,在面向对象系统中,直接使用某些对象会带来很多问题,作为间接层的proxy对象便是解决这一问题的常用手段
  • 具体proxy设计模式的实现方法、实现粒度都相差很大,有些可能对单个对象做细粒度的控制,如copy-on-write技术,有些可能对组件模块提供抽象代理层,在架构层次对对象做proxy
  • Porxy并不一定要求保持接口完整的一致性,只要能够实现间接控制,有时候损失一些透明性是可以接收的

Go语言代码实现

工程目录

proxy.go

package Proxyimport ("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 Proxyimport ("testing"
)func TestAgentTask_RentHouse(t *testing.T) {agent := NewAgentTask()agent.RentHouse("北京", 8000)
}

设计模式--代理(Proxy)模式相关推荐

  1. 设计模式---代理(Proxy)模式

    1 定义 代理模式,为想要访问的对象创建一个代理,使访问原对象变为访问代理对象.代理模式可以提供非常好的访问控制.生活中最多的代理模式例子就是中介. 2 代理模式结构与实现 代理模式通用类图如下所示( ...

  2. 设计模式学习笔记——代理(Proxy)模式

    设计模式学习笔记--代理(Proxy)模式 @(设计模式)[设计模式, 代理模式, proxy] 设计模式学习笔记代理Proxy模式 基本介绍 代理案例 类图 实现代码 Printable接口 Pri ...

  3. 状态机设计模式_设计模式-代理/状态机模式

    代理模式 是使率非常高的模式: 为其它对象提供一种代理以控制这个对象的访问.该模式也称为委托模式,在使用的时候代理模式可以为我们提供非常好的访问控制. 如下代码 interface IGamePlay ...

  4. 代理(Proxy)模式 vs. 代理(Agency)机构

    有一天,我将设计模式中的代理模式和我们社会中的代理机构联系起来.发现他们之间有非常多的相似的地方,而且可以互相借鉴. 在讨论这个话题之前,我的老板就率先指出了我的缺点.代理是Proxy不是Agency ...

  5. 小米设计模式系列--proxy模式

    好久没更博了,因为最近忙着学h5和安卓,驱动只看了看wifi,这个就路漫漫其修远兮了,不知道得看到何年何月.决定把前段时间学的设计模式整理下,我是个米粉,曾一直想着去小米公司工作,不过最近买了一款红米 ...

  6. 当Android遇上设计模式之代理(Proxy)模式

    文章目录 1. 代理模式 1.1 代码实现 1.2 使用场景 2. 静态代理与动态代理 设计模式六大原则: 单一职责原则:就一个类仅有一个引起它变化的原因,即类承担的职责单一性: 开放封闭原则:类.模 ...

  7. Head First 设计模式 —— 13. 代理 (Proxy) 模式

    思考题 如何设计一个支持远程方法调用的系统?你要怎样才能让开发人员不用写太多代码?让远程调用看起来像本地调用一样,毫无瑕疵? P435 已经接触过 RPC 了,所以就很容易知道具体流程:客户端调用目标 ...

  8. 《研磨设计模式》chap11 代理proxy模式

    场景:需要查询所有用户数据,不能翻页都显示出来,只显示姓名,在需要的情况下,点击某个用户的姓名出现详细信息. 1. 正常编码:仅查询当前数据 public static void main(Strin ...

  9. C++设计模式之Proxy模式(代理模式)

    代理模式很容易理解,就是代替别人去做某一件事,打个比方,我们需要买水果,一般是去超市或者水果店买水果,很少有人去果园买水果,果园是生产水果的地方,但很少出售水果,在这里,水果店,超市就成了代理. 首先 ...

最新文章

  1. 打造计数君!谷歌提出RepNet:可自动计数视频重复片段 | CVPR 2020
  2. mysql python安装错误_mysql-python安装致命错误
  3. Java中的单例模式
  4. mysql存储过程 带参数例子_MySQL带参数的存储过程小例子
  5. 技术人生:新的生活计划
  6. js mysql 时间日期比较
  7. 你不知道的Python的输入输出
  8. sessionStorage localStorage cookie的区别
  9. CCIE理论-第五篇-SDA-2
  10. 搞事 | 5分钟部署一个机器人帮你告别 “信息焦虑”
  11. linux里的网卡自动连接,【Raspberry Pi】USB无线网卡自动连接
  12. Model与Record转换适配
  13. Kubernetes 小白学习笔记(22)--kubernetes的运维-管理Namespace
  14. Minimum Snap轨迹规划详解(1)轨迹规划入门
  15. 游戏设计的艺术和技术
  16. 出大事了,涛哥你们Java应用GC后不释放内存
  17. 国内杀毒软件的发展史
  18. STL笔记:rb_tree
  19. 那年的中秋——杂乱无章篇 2011年9月10日 阴
  20. 追洞小组 | Windows安装Immunity CANVAS教程

热门文章

  1. java泛型集合_Java泛型集合(Set)
  2. Linux启动重启停止DNS,ubuntu怎么开机停止启动smbd
  3. 《上海市产业绿贷支持绿色新基建(数据中心)发展指导意见》印发了
  4. 『机房工程』弱电必备技能培训PPT/值得您分享
  5. php中如何写js代码提示_PHP 如何编写类似js中alert() 提示框
  6. java 内嵌汇编_C6000嵌入汇编C与汇编对照及功能说明
  7. 成功解决​​​​​​​安装pywin32时出现python version 3.6 required, which was not found in the registry
  8. Competition——AI:国内外人工智能比赛平台以及竞赛类型、竞赛题目、举行时间等之详细攻略(最全+ing)
  9. AI:基于计算机视觉和语音识别案例项目打包过程记录20181226-19
  10. TF学习——TF之TFOD:基于TFOD AP训练ssd_mobilenet预模型+faster_rcnn_inception_resnet_v2_模型训练过程(TensorBoard监控)全记录