Padrão de design

Um padrão de design é a forma reutilizável de uma solução para um problema de design. A ideia foi introduzida pelo arquiteto Christopher Alexander e foi adaptada para várias outras disciplinas, principalmente a ciência da computação.

Padrões de design de software
Os padrões de design de software são propostas para soluções gerais que foram desenvolvidas para resolver problemas semelhantes frequentemente encontrados durante o design de software. Embora os padrões de design de software geralmente sejam definidos independentemente das linguagens de programação, os padrões de design de software adequados às linguagens de programação orientadas a objetos são mais conhecidos. Esses padrões mostram os relacionamentos e interações entre objetos e classes. O programador pode personalizar um padrão de design observando o problema em sua mão.

Detalhes
Uma coleção organizada de padrões de design relacionados a um campo específico é chamada de linguagem de padrão. Esta linguagem fornece uma terminologia comum para discutir as situações que os designers enfrentam.

Os elementos dessa linguagem são entidades chamadas padrões. Cada padrão descreve um problema que ocorre repetidamente em nosso ambiente e, em seguida, descreve o núcleo da solução para esse problema, de tal forma que você pode usar essa solução um milhão de vezes, sem nunca fazer da mesma maneira duas vezes . – Christopher Alexander

A documentação de um padrão requer explicar por que uma situação específica causa problemas e como os componentes do padrão se relacionam entre si para fornecer a solução. Christopher Alexander descreve problemas comuns de design como decorrentes de “forças conflitantes” – como o conflito entre querer que um quarto seja ensolarado e que não sobreaqueça nas tardes de verão. Um padrão não diria ao projetista quantas janelas colocar na sala; em vez disso, ele proporia um conjunto de valores para guiar o designer em direção a uma decisão que é melhor para sua aplicação específica. Alexander, por exemplo, sugere que devem ser incluídas janelas suficientes para direcionar a luz ao redor da sala. Ele considera isso uma boa solução porque acredita que aumenta o prazer da sala por seus ocupantes. Outros autores podem chegar a conclusões diferentes, se valorizarem mais os custos de aquecimento ou os custos de material. Esses valores, usados ​​pelo autor do padrão para determinar qual solução é “melhor”, também devem ser documentados dentro do padrão.

A documentação padrão também deve explicar quando é aplicável. Como duas casas podem ser muito diferentes umas das outras, um padrão de design para casas deve ser amplo o suficiente para ser aplicado a ambas, mas não tão vago que não ajude o designer a tomar decisões. O intervalo de situações em que um padrão pode ser usado é chamado de contexto. Alguns exemplos podem ser “todas as casas”, “todas as casas de dois andares” ou “todos os lugares onde as pessoas passam tempo”.

Por exemplo, no trabalho de Christopher Alexander, paradas de ônibus e salas de espera em um centro cirúrgico estão dentro do contexto do padrão “UM LUGAR PARA ESPERAR”.

Classes de padrões de design
O livro Padrões de Design da Quadruple Gang (ISBN 0-201-63361-2) distingue três padrões de padrões de design, mas não há critérios precisos que os separem uns dos outros.

Padrões de criação
Os padrões de criação fornecem sugestões sobre como criar objetos de software (ou, em outras palavras, instâncias de classe). A idéia é que um bom software deve ser projetado independentemente de como os objetos que ele contém são criados. Em outras palavras, onde e como os objetos são criados não afeta a operação do software a que pertencem; novos recursos não devem ser adicionados e problemas com as alterações.

À medida que os sistemas de software evoluem, a composição de objetos ganha mais importância do que a herança de classes. A razão para isso é que os projetos baseados na definição de padrões simples de comportamento básico para sistemas de software são mais flexíveis do que os designs baseados em comportamento fixo. Em outras palavras, adicionar comportamentos a objetos como uma combinação permite que o comportamento posterior seja modificado de acordo com o desenvolvimento do software. Neste caso, um projeto baseado nos requisitos comportamentais básicos para o software desenvolvido torna possível usar comportamentos diferentes ou mais complexos sem modificar as interfaces do objeto.

No entanto, é mais difícil amostrar objetos que fornecem comportamento básico por meio de combinações de objetivos ou criar objetos de classes derivadas herdando ou alterando o comportamento. Os padrões de criação incluem padrões de software que podem ser usados ​​para superar essas dificuldades.

Padrões de criação armazenam no sistema de software quais classes concretas são usadas na instância do objeto, bem como como essas instâncias são criadas e montadas.

Método de fábrica
Ao herdar como o objeto o cria sob a interface única usada para criação de objetos, ele deixa as funções de criação de objetos na interface, deixando-as para as subclasses.

Exemplo (padrão de protótipo)
Ao criar objetos de classes complexas e / ou caras, eles permitem que novos objetos sejam criados por amostragem dos existentes, em vez de serem criados desde o início. Desta forma, novos objetos são facilmente criados e os recursos não são ocupados desnecessariamente.

Padrão de fábrica abstrata
Uma interface única possibilita a criação de uma família de objetos em diferentes plataformas. Este aplicativo de software numerado pode ser movido para diferentes plataformas sem qualquer alteração comportamental. O padrão de fábrica abstrata mantém quais classes concretas são usadas em uma única interface.

Padrão de construtor
Ele permite que um grupo complexo de objetos seja criado em partes, conforme necessário, por meio de uma única interface. Conforme o usuário usa o grupo de objetos, o grupo de objetos é estruturado na direção necessária. Peças não utilizadas são criadas desnecessariamente e não gastam recursos.

O padrão singleton
Em uma classe, apenas um objeto é criado para ser criado. Este objeto pode ser acessado de qualquer lugar no aplicativo. O objeto não pode ser criado até ser usado pela primeira vez.

Padrões Estruturais
Ele fornece sugestões que permitem a construção de estruturas de software mais amplas, combinando classes e objetos de padrões estruturais. Padrões de estrutura de classes e padrões de estrutura de objetos são divididos em dois.

Os padrões de estrutura de classe estendem as construções usando aplicativos de herança de classe ou de composição. Padrões de estrutura de objetos mostram como combinar objetos para ganhar novas funções.

Padrão composto
Ele permite que os objetos sejam combinados em uma relação de peça inteira com uma estrutura de árvore, e esse composto pode ser alcançado a partir de uma única interface. A estrutura composta pode se expandir e contrair ao longo do tempo, adicionando e removendo novos objetos.

Fachada (padrão de fachada)
Permite que uma estrutura complexa seja usada em conjunto em uma única interface.

Padrão decorador
Permite que um objeto adicione novas responsabilidades sem alterar o objeto. Torna possível melhorar a funcionalidade de objetos sem subclassificação.

Padrão de ponte
Permite que a interface e a implementação concreta sejam separadas umas das outras. Alterar a interface não afeta a interface. Ambos podem ser desenvolvidos de forma independente.

Padrão de peso
Em vez de criar um grande número de objetos semelhantes, ele permite a criação de uma estrutura de objetos agrupada, criando objetos visuais de um objeto de exemplo. As variáveis ​​de estado dos objetos visuais são armazenadas pelo usuário, não pelo próprio objeto.

Padrão adaptador
É usado para adaptar as interfaces de objetos ou classes de diferentes fontes.

Padrão de proxy
É possível imitar a interface para usar objetos complicados, caros e difíceis de construir. Ele permite que a orientação do objeto físico do objeto seja ocultada do usuário.

Padrões de comportamento
Padrões comportamentais fornecem sugestões sobre como responsabilidades funcionais podem ser atribuídas entre objetos e como os métodos de solução exigidos pelo software podem ser usados ​​objetivamente. Padrões comportamentais também fornecem objetos e padrões de classes, bem como padrões relacionados à comunicação entre objetos. Padrões comportamentais permitem que o designer se concentre em métodos de comunicação e comunicação entre objetos.

Padrões comportamentais também são divididos em dois, assim como estão em padrões estruturais: padrões de comportamento de classe e padrões de comportamento de objetos.

Os padrões de comportamento de classe permitem que o comportamento seja distribuído entre classes usando herança. Padrões de comportamento de objetos tornam possível alcançar o comportamento através de um grupo de objetos que não pode ser facilmente alcançado por um único objeto através da composição de objetos.

Padrão de mediador
Objetos conectados entre si podem ser guiados a partir de um único ponto (isto é, pelo buscador) sob o mesmo teto. Objetos conectados ao localizador de pesquisa comunicam alterações de status ao localizador de pesquisa. O localizador localiza solicitações de objetos relacionados à edição e ao pedido exigidos pelo aplicativo. Objetos de usuário de nível superior só se conectam ao localizador.

Padrão de estado
Permite que um objeto mude seu comportamento de acordo com sua situação. Do ponto de vista do usuário, dá a impressão de que você está modificando a classe de objeto. Ele permite que novos comportamentos sejam adicionados e removidos na direção exigida pelo aplicativo. Objetos de usuário não são afetados por tais alterações.

Padrão observador
Permite que um grupo de objetos, observadores, seja automaticamente informado de mudanças em um objeto observado. O objeto sob observação continua a funcionar independentemente de quem está sendo rastreado. É possível que novos observadores participem ou saiam a tempo. Desta forma, o aplicativo pode alterar o comportamento ao longo do tempo.

Padrão de método de modelo
Ele permite que um procedimento seja usado como um modelo de solução. Isso possibilita que algumas etapas de processamento no molde sejam processadas por subclasses. Portanto, algumas etapas intermediárias podem ser alteradas sem alterar o padrão principal. Os usuários não estão cientes dessas alterações.

Padrão de comando
Isso possibilita que as solicitações do usuário (objetivo) sejam transformadas em objetos e processadas. Dessa forma, os desejos de diferentes usuários podem ser convertidos em registros objetivos e mantidos em filas ou registros. Também é possível reverter as transações feitas neste cofre.

Cadeia de responsabilidades (padrão de cadeia de responsabilidade)
Um usuário (objetivo) permite que a solicitação seja avaliada por vários objetos a serem atendidos. o usuário transmite a solicitação através de uma única interface. As solicitações são tratadas, por sua vez, pelos objetos conectados à solicitação. A solicitação é transferida de um objeto para outro na cadeia até que seja bem-vinda. É possível adicionar ou remover novos objetos na cadeia ao longo do tempo. O usuário não é afetado pela interface de tais alterações.

Padrão intérprete
A pseudo-linguagem definida para preencher os requisitos de aplicativos complexos é um modelo de intérprete. A pseudo-linguagem permite que as regras gramaticais sejam facilmente aplicadas, definindo-as como classes. Como as regras gramaticais são definidas como classes, elas podem ser facilmente modificadas e aprimoradas.

Yadigâr (padrão de lembrança)
O Yadigâr é usado para ocultar os estados de objetos que desempenham papéis importantes no software do aplicativo e para lembrá-los ou lembrá-los quando necessário.

Padrão de iterador
Ele garante que os objetos localizados em um objeto de massa (Aggragate Object) possam ser alcançados em seqüência, independentemente de como os objetos são representados ou realizados. Objetos representados dessa maneira podem ser acessados ​​através de uma única interface.

Estratégia (estratégia)
Na mesma interface, muitos métodos de solução que podem resolver o mesmo problema ocultam a classe, possibilitando satisfazer solicitações de objetos do usuário sem saber qual método é usado. O usuário se depara com diferentes formas de comportamento quando afirma que está trabalhando com o mesmo tipo de objeto.

Padrão visitante
Permite que novas operações sejam adicionadas em uma estrutura composta. O visitante visita objetos individuais dentro da estrutura composta, coleta as informações necessárias, processa-as e as apresenta ao usuário.