zoukankan      html  css  js  c++  java
  • 软件构架模式——代理模式介绍

    什么是代理模式?

    来张图:

     

    1.代理模式适用于什么场景?

    直接访问一个组件通常是不合适的。我们不想将物理地址强制编码到客户机,对组件直接和无限制的访问可能是低效的或者不安全的,所以就需要额外的控制机制。

    所以,让客户机通过组件代表访问,而不是通过组件本身,这种中间的代表组件----就称为代理---提供组件的接口并执行附加的前期处理和后期处理。

    代理提供了原件相同的接口,而且保证了对原件的正确访问。为完成这种功能,代理保持对它所表示的原件的引用。

    2.代理需要实现什么功能:

    当客户机执行它的任务时,它要求代理实施一种服务:

    ·代理接受新来的服务请求并对其进行前期处理。这种前期处理包括诸如查找原件地址这样的操作,或检查本地存储器,以便查看被请求的信息是否已经可以获得。

    ·如果代理必须参考原件来实现这种请求,那么它会使用合适的通信协议和安全措施将该请求转发到原件。

    ·原件接受这种请求并实现它。原件将响应发回给代理。

    ·代理接收响应。将它传送到客户机之前或之后,代理可实施附加的后期处理操作,例如存储结果、调用原件的析构函数或释放一个资源锁。

    3.代理模式优点:

    1.提高数率和降低成本。虚拟代理变体帮助实现一个“按需装入”的策略。这避免了不必要的磁盘导入并且通常能够加速应用程序。一个类似的观点也应用于缓在代理变体中。然而,很明显,代理的附加开销也许会产生相反的效果,这取决于应用程序。

    2.将服务器组件的位置与客户机相分离。将所有本地信息和定位功能放入一个远程住理变体中,客户机不会因为服务器的迁移或者连网基础结构的变动而受到影响。这将使客户机代码变得更加稳定和可重用。但是注意:一个远程代理的简单实现仍然将原件的位置强制连到其代码中。这样做的优点是它通常可以提供更好的运行性能。如果这种灵活性损失是重要的,则可以考虑往代理中引入一个动态查询幽式,正如在签户机一分配器一服务继模式中所描述的那样。

    3.将内务处理代码从功能中分离出来。更概括地说,这个优点适用于所有的代理变体、一个代理减轻了客户机的负担,而这些负担本不属于客户机持执行的任务。

    代理模式不足:

    1.间接方法导致低效率。所有的代理都引入一个间接方法的附加层。效率的损失与客户机的清晰结构和通过缓存或者通过利用代理所取得的惰性构造所增加的效率相比,通常是可以忽路的。虽然如此,还是应该彻底地检查这种对于代理模式的每个应用程序的效率都有的影响。

    2.过分采用复条策略。小心像缓存或者按需装入这样的复杂策略—一它们并不总是值得的。这样的例子出现在原件是高度动态时,例如在飞机订票或其他票务预约系统中。这里,由于原件数据的变化,复杂的带有失效机制的缓冲存储可能引人新的开销,这种开销使预定的目的失效。通常,只有粗粒度的实体才能证实所得缓存维护工作是正确的。

  • 相关阅读:
    Java实现 蓝桥杯VIP 算法提高 排队打水问题
    Java实现 蓝桥杯VIP 算法提高 排队打水问题
    Java实现 蓝桥杯VIP 算法提高 排队打水问题
    Java实现 蓝桥杯VIP 算法提高 特殊的质数肋骨
    Java实现 蓝桥杯VIP 算法提高 特殊的质数肋骨
    Java实现 蓝桥杯VIP 算法提高 特殊的质数肋骨
    Java实现 蓝桥杯VIP 算法提高 特殊的质数肋骨
    现在使用控件, 更喜欢继承(覆盖控件已有的函数,很奇怪的一种使用方式)
    Controls 属性与继承 TShape 类的小练习(使用TShape可以解决很多图形问题)
    QT创建窗口程序、消息循环和WinMain函数(为主线程建立了一个QEventLoop,并执行exec函数)
  • 原文地址:https://www.cnblogs.com/suifengye/p/9102441.html
Copyright © 2011-2022 走看看