• 代理模式


    代理模式

    一 场景

    在软件开发中,有时候需要访问远程jvm中的对象。我们可以在本地jvm中创建一个代理对象。用这个代理对象将网络细节封装起来,使得客户端不必考虑网络的存在。客户端访问远程jvm对象就像调用本地对象一样。这就是代理模式远程代理

    有时候程序创建的一些对象,十分消耗系统资源,这些对象的加载时间很长。我们可以创建一个不耗资源的虚拟对象。在真实对象完成创建之前,我们使用虚拟对象来代替真实对象。这种创建虚拟对象临时代替真实对象的方式,就是代理模式虚拟代理

    我们在访问的一些对象时,有时候需要进行一些权限的控制。其实可以专门创建一个新对象,把权限的控制的逻辑放到新对象中。这样程序就把权限控制和对象访问分开,实现了一定程度的解耦。这就是代理模式保护代理

    二 定义

        代理模式给一个对象提供一个替身或占位符,来控制对原对象的访问。代理模式是一种对象结构型模式。

    三 类图

     

    Subject(抽象主题):抽象主题类是真实主题类和代理类的共同接口。通过实现同一接口,代理类可以在真实主题类出现任何地方取代它。

    RealSubject(真实主题):真实主题类是真正做事的对象,它实现了具体的业务逻辑操作。它是一个被代理类控制和访问的对象。

    Proxy(代理类)代理类包含了对真实主题类的引用。由于它和真实主题类实现了相同的接口,所以在任何用到真实主题类的地方,都可以被代理类取代。代理类可以控制真实主题类的访问。客户端可以通过访问代理类,来间接调用真实主题类的操作。

    四 代码示例

        现在社会上代购十分流行,我们以代购为例,假设顾客需要购买某个商品。但是顾客所在的城市A没有这个商品。而顾客的好朋友所在的城市B却有这个商品。顾客就可以委托他的好友在城市B给他购买这个商品。然后朋友再通过物流托运给这个顾客。顾客托朋友的购物行为就是代购。

         代购这种行为场景和代理模式十分吻合。顾客的好朋友是真正买东西的人。而顾客的购物行为其实是委托给了好友在买东西。

        顾客和顾客的好友都具有购买的行为,所有定义了一个抽象的主题类的接口IShopping。接口中声明了一个buy方法。

        

        顾客的好友其实就是代购,所以定义了Shopper类实现了IShopping接口。它是真实主题类。Shopper类中实现了IShopping接口的buy方法。Shopper类真正具有购买东西的行为。

     

        顾客也有购买的行为,但是顾客的购买行为其实是委托给了好友来完成。我们定义了一个Customer类,也实现了IShopping接口。并在Customer类中声明了一个Shopper类的实例。Customer类在实现IShopping接口的buy方法时,其实是调用了Shopper实例的buy方法。

     

    运行结果

     

    五 总结

        代理模式是一种对象结构型模式。它能将代理对象与真实被调用的目标对象分离。降低了系统的耦合性,同时具有很好的扩展性。

    优点:

    1. 代理模式中代理类和真实主题类都是对抽象主题类进行编码,都实现了抽象主题的接口,而代理类和真实主题类并没有直接关联,从而降低了耦合性。
    2. 真实主题类中修改了代码的情况下,而代理类不需要跟着修改源代码,符合了“开闭原则”。

    缺点:

    1. 在客户端和真实主题之间增加了代理类,因此有可能会造成请求的处理速度变慢。
    2. 实现代理模式需要增加一些额外的工作,而且有些代理模式的实现过程较为复杂。

     

  • 相关阅读:
    购买软件,主要购买服务;没有服务软件,不要钱,也不要用
    ArcGIS二次开发实践— — 遍历ToolBox中的工具!
    arcgis 3种方法快速制作tpk文件(转)
    ArcGIS10.x Engine直连提示连接超时ORA-12170 来自:http://www.iarcgis.com/?p=1004
    地球Gauss_Kruger中央0度经线图
    zoom to raster resolution
    2015年十亿美元级“独角兽公司”都是怎样的? 美国69家成榜首
    这103家独角兽公司,有谁能在美国过上好日子?
    全球各地最全102家“独角兽”企业名单
    2016年中国独角兽企业估值榜 TOP300
  • 原文地址:https://www.cnblogs.com/YaoxTao/p/16164715.html
Copyright © 2020-2023  润新知