设计模式系列之代理模式(Proxy Pattern)——对象的间接访问
说明:设计模式系列文章是读 模式概述近年来,代购已逐步成为电子商务的一个重要分支。何谓代购,简单来说就是找人帮忙购买所需要的商品,当然你可能需要向实施代购的人支付一定的费用。代购通常分为两种类型:一种是因为在当地买不到某件商品,又或者是因为当地这件商品的价格比其他地区的贵,因此托人在其他地区甚至国外购买该商品,然后通过快递发货或者直接携带回来;还有一种代购,由于消费者对想要购买的商品相关信息的缺乏,自已无法确定其实际价值而又不想被商家宰,只好委托中介机构帮其讲价或为其代买。 在软件开发中,也有一种设计模式可以提供与代购类似的功能。由于某些原因,客户端无法直接访问某个对象或访问某个对象存在困难时,可以通过一个称之为“代理”的第三者来实现间接访问,该方案对应的设计模式被称为代理模式。 模式定义
代理模式是一种对象结构型模式。在代理模式中引入了一个新的代理对象,代理对象在客户端对象和目标对象之间起到中介的作用,它去掉客户不能看到的内容和服务或者增添客户需要的额外的新服务。 模式结构图代理模式的结构比较简单,其核心是代理类,为了让客户端能够一致性地对待真实对象和代理对象,在代理模式中引入了抽象层,代理模式结构如下图所示: 代理模式包含如下三个角色:
模式伪代码代理模式的结构图比较简单,但是在真实的使用和实现过程中要复杂很多,特别是代理类的设计和实现。
模式应用像上面代理类所实现的接口和所代理的方法都在代码中写死,被称之为 JDK中提供的动态代理只能代理一个或者多个接口,如果需要动态代理具体类或者抽象类,可以使用 补充:一文读懂Java中的动态代理 模式总结代理模式是常用的结构型设计模式之一,它为对象的间接访问提供了一个解决方案,可以对对象的访问进行控制。代理模式类型较多,其中远程代理、虚拟代理、保护代理等在软件开发中应用非常广泛。 主要优点(1) 能够协调调用者和被调用者,在一定程度上降低了系统的耦合度。 (2) 客户端可以针对抽象主题角色进行编程,增加和更换代理类无须修改源代码,符合开闭原则,系统具有较好的灵活性和可扩展性。 此外,不同类型的代理模式也具有独特的优点,例如: (1) 远程代理为位于两个不同地址空间对象的访问提供了一种实现机制,可以将一些消耗资源较多的对象和操作移至性能更好的计算机上,提高系统的整体运行效率。 (2) 虚拟代理通过一个消耗资源较少的对象来代表一个消耗资源较多的对象,可以在一定程度上节省系统的运行开销。 (3) 缓冲代理为某一个操作的结果提供临时的缓存存储空间,以便在后续使用中能够共享这些结果,优化系统性能,缩短执行时间。 (4) 保护代理可以控制对一个对象的访问权限,为不同用户提供不同级别的使用权限。 主要缺点(1) 由于在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢,例如保护代理。 (2) 实现代理模式需要额外的工作,而且有些代理模式的实现过程较为复杂,例如远程代理。 适用场景代理模式的类型较多,不同类型的代理模式有不同的优缺点,它们应用于不同的场合: (1) 当客户端对象需要访问远程主机中的对象时可以使用远程代理。 (2) 当需要用一个消耗资源较少的对象来代表一个消耗资源较多的对象,从而降低系统开销、缩短运行时间时可以使用虚拟代理,例如一个对象需要很长时间才能完成加载时。 (3) 当需要为某一个被频繁访问的操作结果提供一个临时存储空间,以供多个客户端共享访问这些结果时可以使用缓冲代理。通过使用缓冲代理,系统无须在客户端每一次访问时都重新执行操作,只需直接从临时缓冲区获取操作结果即可。 (4) 当需要控制对一个对象的访问,为不同用户提供不同级别的访问权限时可以使用保护代理。 (5) 当需要为一个对象的访问(引用)提供一些额外的操作时可以使用智能引用代理。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |