11桥接和代理模式
桥接模式(Bridge Pattern)
-
定义:将抽象部分与它的实现部分解耦,使得两者都能够独立变化。
- 又被称为柄体(Handle and Body)模式或接口(Interface)模式
- 用抽象关联取代了传统的多层继承
- 将类之间的静态继承关系转换为动态的对象组合关系
-
简单结构:4个角色
- Abstraction(抽象类)
- RefinedAbstraction(扩充抽象类)
- Implementor(实现类接口)
- ConcreteImplementor(具体实现类)
-
优缺点:
- 优点:
- 分离抽象接口及其实现部分
- 可以取代多层继承方案,极大地减少了子类的个数
- 提高了系统的可扩展性,在两个变化维度中任意扩展一个维度,不需要修改原有系统,符合开闭原则
- 缺点:
- 会增加系统的理解与设计难度,由于关联关系建立在抽象层,要求开发者一开始就针对抽象层进行设计与编程
- 正确识别出系统中两个独立变化的维度并不是一件容易的事情
- 优点:
-
适用环境:
- 需要在抽象化和具体化之间增加更多的灵活性,避免在两个层次之间建立静态的继承关系
- 抽象部分和实现部分可以以继承的方式独立扩展而互不影响
- 一个类存在两个(或多个)独立变化的维度,且这两个(或多个)维度都需要独立地进行扩展
- 不希望使用继承或因为多层继承导致系统类的个数急剧增加的系统
代理模式(Proxy Pattern)
-
定义:给某一个对象提供一个代理或占位符,并由代理对象来控制对原对象的访问。
- 引入一个新的代理对象
- 代理对象在客户端对象和目标对象之间起到中介的作用
- 去掉客户不能看到的内容和服务或者增添客户需要的额外的新服务
-
简单结构:3个角色
- Subject(抽象主题角色)
- Proxy(代理主题角色)
- RealSubject(真实主题角色)
-
优缺点:
- 优点:
- 能够协调调用者和被调用者,在一定程度上降低了系统的耦合度
- 客户端可以针对抽象主题角色进行编程,增加和更换代理类无须修改源代码,符合开闭原则,系统具有较好的灵活性和可扩展性
- 缺点:
- 由于在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢(例如保护代理)
- 实现代理模式需要额外的工作,而且有些代理模式的实现过程较为复杂(例如远程代理)
- 优点:
-
常见的代理模式
- 远程代理(Remote Proxy)
- 虚拟代理(Virtual Proxy)
- 保护代理(Protect Proxy)
- 缓冲代理(Cache Proxy)
- 智能引用代理(Smart Reference Proxy)
-
适用环境:
- 当客户端对象需要访问远程主机中的对象时可以使用远程代理;
- 当需要用一个消耗资源较少的对象来代表一个消耗资源较多的对象,从而降低系统开销、缩短运行时间时可以使用虚拟代理;
- 当需要为某一个被频繁访问的操作结果提供一个临时存储空间,以供多个客户端共享访问这些结果时可以使用缓冲代理;
- 当需要控制对一个对象的访问,为不同用户提供不同级别的访问权限时可以使用保护代理;当需要为一个对象的访问(引用)提供一些额外的操作时可以使用智能引用代理。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律