设计模式--代理(Proxy)模式
模式定义
为其他对象提供一种代理以控制(隔离,使用接口)对这个对象的访问
类图
要点总结
- “增加一层间接层”是软件系统中对许多复杂问题的一种常见解决方法,在面向对象系统中,直接使用某些对象会带来很多问题,作为间接层的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)模式相关推荐
- 设计模式---代理(Proxy)模式
1 定义 代理模式,为想要访问的对象创建一个代理,使访问原对象变为访问代理对象.代理模式可以提供非常好的访问控制.生活中最多的代理模式例子就是中介. 2 代理模式结构与实现 代理模式通用类图如下所示( ...
- 设计模式学习笔记——代理(Proxy)模式
设计模式学习笔记--代理(Proxy)模式 @(设计模式)[设计模式, 代理模式, proxy] 设计模式学习笔记代理Proxy模式 基本介绍 代理案例 类图 实现代码 Printable接口 Pri ...
- 状态机设计模式_设计模式-代理/状态机模式
代理模式 是使率非常高的模式: 为其它对象提供一种代理以控制这个对象的访问.该模式也称为委托模式,在使用的时候代理模式可以为我们提供非常好的访问控制. 如下代码 interface IGamePlay ...
- 代理(Proxy)模式 vs. 代理(Agency)机构
有一天,我将设计模式中的代理模式和我们社会中的代理机构联系起来.发现他们之间有非常多的相似的地方,而且可以互相借鉴. 在讨论这个话题之前,我的老板就率先指出了我的缺点.代理是Proxy不是Agency ...
- 小米设计模式系列--proxy模式
好久没更博了,因为最近忙着学h5和安卓,驱动只看了看wifi,这个就路漫漫其修远兮了,不知道得看到何年何月.决定把前段时间学的设计模式整理下,我是个米粉,曾一直想着去小米公司工作,不过最近买了一款红米 ...
- 当Android遇上设计模式之代理(Proxy)模式
文章目录 1. 代理模式 1.1 代码实现 1.2 使用场景 2. 静态代理与动态代理 设计模式六大原则: 单一职责原则:就一个类仅有一个引起它变化的原因,即类承担的职责单一性: 开放封闭原则:类.模 ...
- Head First 设计模式 —— 13. 代理 (Proxy) 模式
思考题 如何设计一个支持远程方法调用的系统?你要怎样才能让开发人员不用写太多代码?让远程调用看起来像本地调用一样,毫无瑕疵? P435 已经接触过 RPC 了,所以就很容易知道具体流程:客户端调用目标 ...
- 《研磨设计模式》chap11 代理proxy模式
场景:需要查询所有用户数据,不能翻页都显示出来,只显示姓名,在需要的情况下,点击某个用户的姓名出现详细信息. 1. 正常编码:仅查询当前数据 public static void main(Strin ...
- C++设计模式之Proxy模式(代理模式)
代理模式很容易理解,就是代替别人去做某一件事,打个比方,我们需要买水果,一般是去超市或者水果店买水果,很少有人去果园买水果,果园是生产水果的地方,但很少出售水果,在这里,水果店,超市就成了代理. 首先 ...
最新文章
- 打造计数君!谷歌提出RepNet:可自动计数视频重复片段 | CVPR 2020
- mysql python安装错误_mysql-python安装致命错误
- Java中的单例模式
- mysql存储过程 带参数例子_MySQL带参数的存储过程小例子
- 技术人生:新的生活计划
- js mysql 时间日期比较
- 你不知道的Python的输入输出
- sessionStorage localStorage cookie的区别
- CCIE理论-第五篇-SDA-2
- 搞事 | 5分钟部署一个机器人帮你告别 “信息焦虑”
- linux里的网卡自动连接,【Raspberry Pi】USB无线网卡自动连接
- Model与Record转换适配
- Kubernetes 小白学习笔记(22)--kubernetes的运维-管理Namespace
- Minimum Snap轨迹规划详解(1)轨迹规划入门
- 游戏设计的艺术和技术
- 出大事了,涛哥你们Java应用GC后不释放内存
- 国内杀毒软件的发展史
- STL笔记:rb_tree
- 那年的中秋——杂乱无章篇 2011年9月10日 阴
- 追洞小组 | Windows安装Immunity CANVAS教程
热门文章
- java泛型集合_Java泛型集合(Set)
- Linux启动重启停止DNS,ubuntu怎么开机停止启动smbd
- 《上海市产业绿贷支持绿色新基建(数据中心)发展指导意见》印发了
- 『机房工程』弱电必备技能培训PPT/值得您分享
- php中如何写js代码提示_PHP 如何编写类似js中alert() 提示框
- java 内嵌汇编_C6000嵌入汇编C与汇编对照及功能说明
- 成功解决​​​​​​​安装pywin32时出现python version 3.6 required, which was not found in the registry
- Competition——AI:国内外人工智能比赛平台以及竞赛类型、竞赛题目、举行时间等之详细攻略(最全+ing)
- AI:基于计算机视觉和语音识别案例项目打包过程记录20181226-19
- TF学习——TF之TFOD:基于TFOD AP训练ssd_mobilenet预模型+faster_rcnn_inception_resnet_v2_模型训练过程(TensorBoard监控)全记录