设计模式之美:Structural Patterns(结构型模式)

简介:

结构型模式涉及到如何组合类和对象以获得更大的结构。

  • 结构型类模式采用继承机制来组合接口实现。
  • 结构型对象模式不是对接口和实现进行组合,而是描述了如何对一些对象进行组合,从而实现新功能的一些方法。

因为可以在运行时改变对象组合关系,所以对象组合方式具有更大的灵活性,而这种机制用静态组合是不可能实现的。

  • Adapter(适配器)
    • 将一个类的接口转换成客户希望的另外一个接口。
    • Adapter 模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
    • Convert the interface of a class into another interface clients expect.
    • Adapter lets classes work together that couldn't otherwise because of incompatible interfaces.
  • Bridge(桥接)
    • 将抽象部分与它的实现部分分离,使它们都可以独立地变化。
    • Decouple an abstraction from its implementation so that the two can vary independently.
  • Composite(组合)
    • 将对象组合成树形结构以表示 “部分-整体” 的层次结构。
    • Composite 使得用户对于单个对象和组合对象的使用具有一致性。
    • Compose objects into tree structures to represent part-whole hierarchies.
    • Composite lets clients treat individual objects and compositions of objects uniformly.
  • Decorator(装饰)
    • 动态地给一个对象添加一些额外的职责。
    • 就增加功能来说,Decorator 模式相比生成子类更为灵活。
    • Attach additional responsibilities to an object dynamically.
    • Decorators provide a flexible alternative to subclassing for extending functionality.
  • Facade(外观)
    • 为子系统中的一组接口提供一个一致的界面。
    • Facade 模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
    • Provide a unified interface to a set of interfaces in a subsystem.
    • Facade defines a higher-level interface that makes the subsystem easier to use.
  • Flyweight(享元)
    • 运用共享技术有效地支持大量细粒度的对象。
    • Use sharing to support large numbers of fine-grained objects efficiently.
  • Proxy(代理)
    • 为其他对象提供一种代理以控制对这个对象的访问。
    • Provide a surrogate or placeholder for another object to control access to it.

结构型模式之间存在很多相似性,尤其是它们的参与者和协作之间的相似性。

这是因为结构型模式依赖于同一个很小的语言机制集合构造代码和对象:

  • 单继承和多重继承机制用于基于类的模式。
  • 对象组合机制用于对象式模式。

Adapter 和 Bridge 的相似性

Adapter 模式和 Bridge 模式具有一些共同的特征。它们之间的不同之处主要在于它们各自的用途。

Adapter 模式主要是为了解决两个已有接口之间不匹配的问题。它不考虑这些接口时怎么实现的,也不考虑它们各自可能会如何演化。

Bridge 模式则对抽象接口和它的实现部分进行桥接。它为用户提供了一个稳定的接口。

Adapter 模式和 Bridge 模式通常被用于软件生命周期的不同阶段。

当你发现两个不兼容的类必须同时工作时,就有必要使用 Adapter 模式,以避免代码重复。此处耦合不可见。

相反,Bridge 的使用者必须事先知道:一个抽象将有多个实现部分,并且抽象和实现两者是独立演化得。

Composite 和 Decorator 的相似性

Composite 和 Decorator 模式具有类似的结构图,这说明它们都基于递归组合来组织可变数目的对象。

Decorator 旨在使你能够不需要生成子类即可给对象添加职责。这就避免了静态实现所有功能组合,从而导致子类急剧增加。

Composite 则有不同的目的,它旨在构造类,使多个相关的对象能够以统一的方式处理,而多重对象可以被当作一个对象来处理。它重点不在于修饰,而在于表示。

Decorator 和 Proxy 的相似性

Decorator 和 Proxy 模式描述了怎样为对象提供一定程度上的间接引用。

Decorator 和 Proxy 对象的实现部分都保留了指向另一个对象的指针,它们向这个对象发送请求。

同样,它们也具有不同的设计目的。

Proxy 不能动态地添加和分离性质,它也不是为递归组合而设计的。它的目的是,当直接访问一个实体不方便或不符合需要时,为这个实体提供一个替代者。

在 Proxy 中,实体定义了关键功能,而 Proxy 提供对它的访问。

在 Decorator 中,组件仅提供了部分功能,而 Decorator 负责完成其他功能。








本文转自匠心十年博客园博客,原文链接:http://www.cnblogs.com/gaochundong/p/design_pattern_structural_patterns.html,如需转载请自行联系原作者


目录
相关文章
|
8月前
|
设计模式 Java
【设计模式】JAVA Design Patterns——Bridge(桥接模式)
【设计模式】JAVA Design Patterns——Bridge(桥接模式)
【设计模式】JAVA Design Patterns——Bridge(桥接模式)
|
8月前
|
设计模式 Java API
【设计模式】JAVA Design Patterns——Combinator(功能模式)
【设计模式】JAVA Design Patterns——Combinator(功能模式)
|
8月前
|
设计模式 监控 Java
【设计模式】JAVA Design Patterns——Circuit Breaker(断路器模式)
【设计模式】JAVA Design Patterns——Circuit Breaker(断路器模式)
|
8月前
|
设计模式 Java 程序员
【设计模式】JAVA Design Patterns——Bytecode(字节码模式)
【设计模式】JAVA Design Patterns——Bytecode(字节码模式)
|
8月前
|
设计模式 算法 Java
【设计模式】JAVA Design Patterns——Builder(构造器模式)
【设计模式】JAVA Design Patterns——Builder(构造器模式)
|
8月前
|
设计模式 Java 容器
【设计模式】JAVA Design Patterns——Async Method Invocation(异步方法调用模式)
【设计模式】JAVA Design Patterns——Async Method Invocation(异步方法调用模式)
|
5月前
|
设计模式 存储 Java
【十】设计模式~~~结构型模式~~~享元模式(Java)
文章详细介绍了享元模式(Flyweight Pattern),这是一种对象结构型模式,通过共享技术实现大量细粒度对象的重用,区分内部状态和外部状态来减少内存中对象的数量,提高系统性能。通过围棋棋子的设计案例,展示了享元模式的动机、定义、结构、优点、缺点以及适用场景,并探讨了单纯享元模式和复合享元模式以及与其他模式的联用。
【十】设计模式~~~结构型模式~~~享元模式(Java)
|
5月前
|
设计模式 存储 Java
【九】设计模式~~~结构型模式~~~外观模式(Java)
文章详细介绍了外观模式(Facade Pattern),这是一种对象结构型模式,通过引入一个外观类来简化客户端与多个子系统之间的交互,降低系统的耦合度,并提供一个统一的高层接口来使用子系统。通过文件加密模块的实例,展示了外观模式的动机、定义、结构、优点、缺点以及适用场景,并讨论了如何通过引入抽象外观类来提高系统的可扩展性。
【九】设计模式~~~结构型模式~~~外观模式(Java)
|
5月前
|
设计模式 Java
【八】设计模式~~~结构型模式~~~装饰模式(Java)
文章详细介绍了装饰模式(Decorator Pattern),这是一种对象结构型模式,用于在不使用继承的情况下动态地给对象添加额外的职责。装饰模式通过关联机制,使用装饰器类来包装原有对象,并在运行时通过组合的方式扩展对象的行为。文章通过图形界面构件库的设计案例,展示了装饰模式的动机、定义、结构、优点、缺点以及适用场景,并提供了Java代码实现和应用示例。装饰模式提高了系统的灵活性和可扩展性,适用于需要动态、透明地扩展对象功能的情况。
【八】设计模式~~~结构型模式~~~装饰模式(Java)
|
5月前
|
设计模式 XML 存储
【七】设计模式~~~结构型模式~~~桥接模式(Java)
文章详细介绍了桥接模式(Bridge Pattern),这是一种对象结构型模式,用于将抽象部分与实现部分分离,使它们可以独立地变化。通过实际的软件开发案例,如跨平台视频播放器的设计,文章阐述了桥接模式的动机、定义、结构、优点、缺点以及适用场景,并提供了完整的代码实现和测试结果。桥接模式适用于存在两个独立变化维度的系统,可以提高系统的可扩展性和灵活性。
【七】设计模式~~~结构型模式~~~桥接模式(Java)

热门文章

最新文章

  • 1
    设计模式转型:从传统同步到Python协程异步编程的实践与思考
    64
  • 2
    C++一分钟之-设计模式:工厂模式与抽象工厂
    55
  • 3
    《手把手教你》系列基础篇(九十四)-java+ selenium自动化测试-框架设计基础-POM设计模式实现-下篇(详解教程)
    63
  • 4
    C++一分钟之-C++中的设计模式:单例模式
    79
  • 5
    《手把手教你》系列基础篇(九十三)-java+ selenium自动化测试-框架设计基础-POM设计模式实现-上篇(详解教程)
    49
  • 6
    《手把手教你》系列基础篇(九十二)-java+ selenium自动化测试-框架设计基础-POM设计模式简介(详解教程)
    81
  • 7
    Java面试题:结合设计模式与并发工具包实现高效缓存;多线程与内存管理优化实践;并发框架与设计模式在复杂系统中的应用
    70
  • 8
    Java面试题:设计模式在并发编程中的创新应用,Java内存管理与多线程工具类的综合应用,Java并发工具包与并发框架的创新应用
    54
  • 9
    Java面试题:如何使用设计模式优化多线程环境下的资源管理?Java内存模型与并发工具类的协同工作,描述ForkJoinPool的工作机制,并解释其在并行计算中的优势。如何根据任务特性调整线程池参数
    63
  • 10
    Java面试题:请列举三种常用的设计模式,并分别给出在Java中的应用场景?请分析Java内存管理中的主要问题,并提出相应的优化策略?请简述Java多线程编程中的常见问题,并给出解决方案
    137