代理模式学习笔记


一、简述代理模式

为其它对象提供一种中间代理以控制对这个对象的访问。

核心目的:在真正需要的时候才去创建或者初始化某些开销很大的对象,以降低开销。

模式适用场景:
1.为一个对象在不同地址空间提供局部代表。
2.控制对原始对象的访问。
3.根据需要创建开销很大的对象。
4.需要在访问对象时执行一些附加操作。

二、GOF书本例子—文本编辑器中的image

1.例子说明:

在文本编辑器中,图像(Image)的创建和初始化一般会比文本耗费更多的资源,使用另一个对象。即图像Proxy(ImageProxy),来代替真正的图像,Proxy可以代替一个图像对象,并在需要时负责初始化这个图像对象。

代码总体调用关系如下图所示:

2
示例场景结构图:
11
代理模式主要参与者(请配合类图进行阅读):
1.代理Proxy(ImageProxy):控制对image对象的访问,并负责创建和删除它。
2.RealSubject(Image):真正的image对象
3.Subject(Graphic):提供一个统一的接口规范给RealSubject与Proxy。
类图如下图所示:
233

2.C++代码实现

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

代码执行结果:
在这里插入图片描述
代码执行结果分析:
初始化的时候默认值extent是888,但在调用Proxy的draw后,真正的Image对象被创建并初始化(extent的值为88),所以后面使用的都是Image对象。

总结

代理模式总结:

模式优点:
1、代理模式能将代理对象与真实被调用的目标对象分离。
2、一定程度上降低了系统的耦合度(Image底层和其业务Proxy分离),扩展性好。
3、可以起到保护目标对象的作用。
4、可以对目标对象的功能进行增强但又不会影响本身已有的代码(更新Image的应用部分功能,只需要修改Proxy不用每次都修改Image类)

模式缺点:
1、代理模式会造成系统设计中类的数量增加。
2、在客户端和目标对象增加一个代理对象,会造成请求处理速度变慢。
3、相对增加了系统的复杂度。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值