文章目录
第四章 结构型模式
1. Adapter(适配器)— 类对象结构型模式
- 意图:
- 使得原本由于接口不兼容而不能一起工作的那些类可以一起工作;
- 别名:
- Wrapper(包装器)
2. Bridge(桥接)— 对象结构模式
- 意图:
- 将抽象部分与实现部分分离,使得他们可以独立地变化;
- 别名:
- Handle/Body
3.Composite(组合) — 对象结构型模式
- 意图:
- 将对象组合成树形结构以表示 “部分-整体” 的层次结构;
- 使得用户对单个对象和组合对象的使用具有一致性;
4. Decorator(装饰) — 对象结构型模式
- 意图:
- 动态的给对象添加一些额外的职责;
- 别名:
- Wrapper(包装器)
- 效果:
- 比静态继承更灵活;
- 避免在层次结构高层的类有太多的特征;
- 实现:
- 将Decorator看作是一个对象的外壳,它可以改变这个对象的行为;
- 比较:
- Adapter:适配器给对象一个全新的接口,装饰只改变对象的职责而不改变接口;
- Composite:装饰是组合的子集,只不过侧重点在于增加额外的职责而不是对象聚集;
- Strategy:装饰改变外表,策略改变内核;
5. Facade(外观)— 对象结构型模式
- 意图:
- 为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,使得子系统易用;
- 使用:
- 为一个复杂的子系统提供一个简单的接口;提供了一个简单的缺省试图,满足大多数用户需求,更多需求可以越过Facade层;
- 客户程序与抽象类强耦合,降低耦合性;
- 协作:
- 客户程序发送请求给Facade的方式与子系统通信,Facade转发请求给适合的子系统对象;
- 比较:
- Abstract Factory:可以替代Facade;
- Mediator:都对已有的类进行了抽象,Mediator是同事类之间的通信;Facade是对子系统和客户系统之间的通信;
6. Flyweight(享元) — 对象结构型模式
- 意图:
- 运用共享技术有效的支持大量细粒度的对象;
- 动机:
- flyweight是一个共享对象;
- 不能对它所运行的的场景做出任何假设;
- 内部状态:存储与flyweight中,包含了独立于场景的信息,共享的基础;
- 外部状态:取决于场景,不能共享;
7. Proxy(代理) — 对象结构型模式
- 意图:
- 为其他对象提供一种代理以控制对这个对象的访问;
- 别名:
- Surrogate
- 适用性:
- 需要用比较通用和复杂的对象指针代替简单的指针的时候,使用proxy模式;
- 远程代理:为一个对象在不同的地址空间提供局部代表;
- 虚代理:更具需要创建开销很大的对象;
- 保护代理:控制对原始对象的访问;
- 智能指引:取代了简单指针,访问对象时执行一些附加操作;
- 对指向实际对象的引用计数,没有引用时自动释放;
- 当第一次引用一个持久对象时,将它装入内存;
- 在访问一个实际对象之前,检查是否已经锁定了他,以确保其他对象不能改变他;
- 效果
- 访问对象时引入了一定程度的间接性;
- 比较:
- Adapter:适配器为适配的对象提供了一个不同的接口;代理提供了与他的实体相同的接口;
- Decorator:装饰为对象添加一个或多个功能,代理控制对象的访问;
8. 总结
- 结构型模式之间具有相似性,可能时因为结构型模式依赖于同一个很小的语言机制集合构造代码和对象;
- Adapter模式与Bridge模式异同:
- Adapter模式主要是为了解决两个已有接口之间不匹配的问题,不考虑接口的实现和演化;不需要对两个独立设计的类进行重新设计,就可以实现协同工作;
- Bridge模式则是对抽象接口与他的(可能是多个)实现部分进行桥接;