【三】设计模式——代理模式(Proxy Pattern)

定义

代理模式(Proxy Pattern)(委托模式):

Provide a surrogate(代理) or placeholder for another object to control access to it.
译:为其他对象提供一种代理以控制对这个对象的访问。

类图

代理模式UML
这里我就不用书本里通用的图了,这里改用安卓代码里的Telephony相关的类图,从中抽出了典型的Phone相关类图。
来解释一下这个图片:
当用户要拨打电话或挂断电话时,调用了PhoneProxy对应的dial或者hangup方法,这里用户是直接没有办法直接访问Phone对象的,相当于更好的进行隔离,无需关心Phone的具体结构及方法。
到达PhoneProxy后,对应的dial方法里,其实是使用自己的成员变量phone:BasePhone 来调用phone.dial,这里的phone有可能是GSMPhone(移动/联通)、CDMAPhone(电信),然后具体的phone进行自己的真实拨号或挂断。
ps:GSM与CDMA的拨号处理上是不同的。
这样我们就可以更好的理解了代理模式结构。

优缺点及注意事项

1. 优点:

职责清晰,扩展性好
还拿上面的例子来说,如果这时候又有了其他的phone,比如最近的VoLTE,我们就可以新建一个VoLTEPhone,实现对应的dial方法,而用户也不需要关心新加了个phone,更好的便于分工合作,和代码的分层处理。

使用场景

当无法或不想直接访问某个对象或访问某个对象存在困难时,可以通过一个代理对象来间接访问,为了保证客户端使用的透明度,委托对象与代理对象需要实现相同的接口。引用自:《Android源码设计模式解析与实战》

实现方式

在写到上面的使用场景时,让我想到了一种使用场景:
老板让我们做一个功能,涉及到应用上层和底层两块实现,因此需要两个人来实现,一个负责上层,一个负责底层,那怎么能让这两个人开发互不影响,专心做好自己的就行呢?
这时我们就可以写一个中间代理,然后上层的人去调代理类对象即可,代理类可以是空实现,而底层的人就专心先做好每种模块的功能,然后最后填充代理类就行。
还拿上面的图来说:

1. 上层开发:

1. do UI development
2. UI dial
3. UI hangup
4. PhoneProxy编写,对应里面空实现

2. 下层实现

1. development BasePhone
2. development GSMPhone/CDMAPhone
3. 填充PhoneProxy类,进行相应的实现

当两者各自完成后,整个项目也就做完啦~~ 如果有问题,各自修各自的问题就好,分工明确~

原文地址:http://blog.csdn.net/yk3372/article/details/53355302

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值