设计模式 - 代理模式
来源:互联网 发布:淘宝图片尺寸 编辑:程序博客网 时间:2024/06/07 17:38
代理模式的定义:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。为了不破坏原有对象的封装性,在客户和访问对象中间加一层代理,以方便控制或者扩展原有对象的功能。主要用于对象访问控制。
0.场景
代理的概念可以理解为一个角色来代替另外一个角色来完成某些特定的功能。比如生产商,经销商,代理经销商三者之间的关系。正常情况下是经销商会直接销售产品,然而在某些特定区域需要代理商去销售产品,这样代理商会有自己的一些行为。我们可以建模Seller为经销商,SellerProxy为代理经销商。
1.建模
ISeller - 经销接口,定义了销售人员的基本行为
Seller - 经销商,经销商实体类
SellerProxy - 代理经销商,会组合经销商的行为,同时还会有自己的特定的行为。终端客户可以通过SellerProxy来买卖产品
2.UML
3.Java代码
ISeller:
package com.designpatternstudy.proxy;interface ISeller { public void sell();}
Seller:
package com.designpatternstudy.proxy;public class Seller implements ISeller{@Overridepublic void sell() {System.out.println("selling products from Seller now");}}
SellerProxy:
package com.designpatternstudy.proxy;public class SellerProxy implements ISeller {ISeller seller;String location;SellerProxy(Seller seller,String location){this.seller=seller;this.location=location;}@Overridepublic void sell() {seller.sell();System.out.println("selling from Seller proxy from location "+this.location);}}
ProxyTest:
package com.designpatternstudy.proxy;public class ProxyTest {/** * @param args */public static void main(String[] args) {ISeller seller = new Seller();ISeller sellerProxy = new SellerProxy(seller,"dalian");sellerProxy.sell();}}
4. 总结
代理模式在很多情况下都非常有用,特别是你想强行控制一个对象的时候,比如:延迟加载,监视状态变更的方法等等
1、“增加一层间接层”是软件系统中对许多负责问题的一种常见解决方法。在面向对象系统中,直接使用某些对象会带来很多问题,作为间接层的proxy对象便是解决这一问题的常用手段。
2、具体proxy设计模式的实现方法、实现粒度都相差很大,有些可能对单个对象作细粒度的控制,有些可能对组件模块提供抽象代理层,在架构层次对对象作proxy。
3、proxy并不一定要求保持接口的一致性,只要能够实现间接控制,有时候损及一些透明性是可以接受的
- 设计模式--【代理模式】
- 设计模式:代理模式
- 设计模式--代理模式
- 设计模式---代理模式
- 设计模式-代理模式
- 设计模式---代理模式
- 设计模式 代理模式
- 设计模式-【代理模式】
- 设计模式-代理模式
- 设计模式----代理模式
- 设计模式-代理模式
- 设计模式---代理模式
- 设计模式--代理模式
- 设计模式-代理模式
- 设计模式- 代理模式
- 设计模式---代理模式
- 设计模式 - 代理模式
- 【设计模式】代理模式
- UVA10878
- hdu1016(素数环)
- 如何知道我在通知栏的展示的 Notification 被点击了?
- USB摄像头(V4L2接口)的图片采集 (一)
- Django:project与app的概念区别
- 设计模式 - 代理模式
- Merge Intervals
- valgrind使用简介
- 新版Dell本本BIOS设置完全手册
- wormhole提升hivereader读取速度方案
- 日期在String和Date类型转换;ParsePosition,formatter.parse,java.sql.Timestamp
- 邮件服务器端口协议
- 一个阿里巴巴码农的六年回眸
- Core Animation学习笔记一:CATransactions