Structural Patterns

  • Foco na criação de estruturas maiores por meio do agrupamento de várias classes e objetos menores, geralmente por meio de composição ou herança.
  • Esses patterns melhoram a flexibilidade e a eficiência do programa

Os padrões estruturais de design de software têm como objetivo principal simplificar o design, estabelecendo uma maneira eficiente de configurar relações entre entidades, como classes e objetos.

Eles visam resolver problemas relacionados à composição e estrutura de classes e objetos, facilitando a organização e a comunicação entre componentes diferentes em um sistema de software. Os problemas específicos que os padrões estruturais tentam resolver incluem:

  1. Extensibilidade e Flexibilidade: Facilitar a extensão de funcionalidades de classes existentes ou a criação de novas funcionalidades com base nas existentes, sem alterar o código original.

  2. Simplificação de Relacionamentos Complexos: Auxiliar na gestão de sistemas com muitas classes inter-relacionadas, proporcionando maneiras de simplificar essas relações e reduzir a complexidade.

  3. Adaptação de Interfaces: Permitir que classes com interfaces incompatíveis trabalhem juntas por meio da adaptação ou tradução de suas interfaces.

  4. Encapsulamento e Abstração: Fornecer mecanismos para encapsular ou abstrair a funcionalidade e a complexidade de um sistema, tornando-o mais compreensível e fácil de usar.

  5. Divisão de Responsabilidades: Dividir responsabilidades entre diferentes classes e objetos de maneira eficaz, promovendo a coesão e o baixo acoplamento.

  6. Composição de Objetos: Facilitar a composição de objetos para alcançar novas funcionalidades, utilizando a composição em vez da herança, o que oferece maior flexibilidade.

Alguns dos padrões estruturais mais conhecidos incluem Adapter, Bridge, Composite, Decorator, Facade, Flyweight e Proxy. Cada um desses padrões tem um propósito específico e ajuda a resolver um conjunto particular de problemas relacionados à estruturação e organização de classes e objetos em um sistema de software.