11桥接和代理模式

桥接模式(Bridge Pattern)

  • 定义:将抽象部分与它的实现部分解耦,使得两者都能够独立变化。

    1. 又被称为柄体(Handle and Body)模式或接口(Interface)模式
    2. 用抽象关联取代了传统的多层继承
    3. 将类之间的静态继承关系转换为动态的对象组合关系
  • 简单结构:4个角色

    1. Abstraction(抽象类)
    2. RefinedAbstraction(扩充抽象类)
    3. Implementor(实现类接口)
    4. ConcreteImplementor(具体实现类)
  • UML:

  • 优缺点:

    1. 优点:
      • 分离抽象接口及其实现部分
      • 可以取代多层继承方案,极大地减少了子类的个数
      • 提高了系统的可扩展性,在两个变化维度中任意扩展一个维度,不需要修改原有系统,符合开闭原则
    2. 缺点:
      • 会增加系统的理解与设计难度,由于关联关系建立在抽象层,要求开发者一开始就针对抽象层进行设计与编程
      • 正确识别出系统中两个独立变化的维度并不是一件容易的事情
  • 适用环境:

    1. 需要在抽象化和具体化之间增加更多的灵活性,避免在两个层次之间建立静态的继承关系
    2. 抽象部分和实现部分可以以继承的方式独立扩展而互不影响
    3. 一个类存在两个(或多个)独立变化的维度,且这两个(或多个)维度都需要独立地进行扩展
    4. 不希望使用继承或因为多层继承导致系统类的个数急剧增加的系统

代理模式(Proxy Pattern)

  • 定义:给某一个对象提供一个代理或占位符,并由代理对象来控制对原对象的访问。

    1. 引入一个新的代理对象
    2. 代理对象在客户端对象和目标对象之间起到中介的作用
    3. 去掉客户不能看到的内容和服务或者增添客户需要的额外的新服务
  • 简单结构:3个角色

    1. Subject(抽象主题角色)
    2. Proxy(代理主题角色)
    3. RealSubject(真实主题角色)
  • UML:

  • 优缺点:

    1. 优点:
      • 能够协调调用者和被调用者,在一定程度上降低了系统的耦合度
      • 客户端可以针对抽象主题角色进行编程,增加和更换代理类无须修改源代码,符合开闭原则,系统具有较好的灵活性和可扩展性
    2. 缺点:
      • 由于在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢(例如保护代理)
      • 实现代理模式需要额外的工作,而且有些代理模式的实现过程较为复杂(例如远程代理)
  • 常见的代理模式

    1. 远程代理(Remote Proxy)
    2. 虚拟代理(Virtual Proxy)
    3. 保护代理(Protect Proxy)
    4. 缓冲代理(Cache Proxy)
    5. 智能引用代理(Smart Reference Proxy)
  • 适用环境:

    1. 当客户端对象需要访问远程主机中的对象时可以使用远程代理
    2. 当需要用一个消耗资源较少的对象来代表一个消耗资源较多的对象,从而降低系统开销、缩短运行时间时可以使用虚拟代理
    3. 当需要为某一个被频繁访问的操作结果提供一个临时存储空间,以供多个客户端共享访问这些结果时可以使用缓冲代理
    4. 当需要控制对一个对象的访问,为不同用户提供不同级别的访问权限时可以使用保护代理;当需要为一个对象的访问(引用)提供一些额外的操作时可以使用智能引用代理
posted @   vbig  阅读(52)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示
主题色彩