Padrões de Projeto - Este é um projeto idealizado na matéria Projeto Avançado de Sistemas da Universidade do Estado da Bahia e ministrada por Eduardo Jorge. O objetivo deste site é agrupar informações sobre padrõres de projetos pouco divulgados, porém não menos importantes.

Todo o conteúdo foi produzido pelos alunos do curso com base, contendo explicação sobre o padrão, diagrama de classes e um exemplo prático.

Object Pool

O Object Pool tem o objetivo de reduzir o tempo e custo das instanciações, reaproveitando objetos, melhorar a performance e o controle sobre os recursos. Pode ser comparado a uma biblioteca, onde um usuário solicita um livro, pega-o, lê e por fim devolve novamente para a biblioteca.

Um uso comum do padrão Object Pool são nas aplicações com bancos de dados, onde a criação das conexões com o banco é custosa, consumindo muito processamento e tempo.

Cache Management

O Cache Management define a estratégia de manter uma cópia, na memória local, de objetos buscados de fora de um programa, como num servidor remoto ou banco de dados. Além disso, permite o acesso rápido ao objeto reduzindo o custo de sua construção no processo de busca.

Command

O padrão de projeto Command tem como principal objetivo encapsular requisições de ações em objetos, de modo que tais requisições possam ser manipuladas, armazenadas (histórico de ações), ou mesmo terem seus efeitos revertidos (operações de desfazer, o famoso 'Ctrl + Z'). Define uma interface comum 'Command' para encapsular as ações.

Filter

Filter é um padrão de projeto utilizado para análise e tratamento de dados. Com esse padrão é possível utilizar um ou mais objetos (filtros) que tratam ou operam um fluxo de dados de maneira específica, a fim de obter soluções genéricas (reutilizáveis).

Command 2

O Padrão Command encapsula uma solicitação como um objeto, o que lhe permite parametrizar outros objetos com diferentes solicitações, enfileirar ou registrar solicitações e implementar recursos de cancelamento de operações. A principal motivação do uso do padrão Command é que algumas vezes é necessário emitir solicitações para objetos sem nada saber sobre a operação que está sendo solicitada ou sobre seu receptor . Como exemplos de uso do padrão temos menus e controles, que são aplicações que possuem apenas comandos (ações) para serem executados através deles.

Decorator

O padrão de projeto decorator tem como propósito principal agregar responsabilidades adicionais a um objeto dinamicamente. Estas classes decoradores oferecem uma alternativa flexível ao uso de herança para estender uma funcionalidade, com isso adiciona-se uma responsabilidade ao objeto e não à classe. Como exemplo disso temos a criação de interfaces gráficas, onde se deseja adicionar uma barra de rolagem (horizontal e/ou vertical) ou uma borda a uma área de texto. Neste exemplo o mais prudente é inserir o componente em outro objeto que adiciona a borda, um Decorator.

Flyweight

O padrão de projeto Flyweight se baseia em usar compartilhamento para suportar de forma eficiente grandes quantidades de objetos. A motivação é reduzir o consumo de memória e o custo em tempo de execução. É ideal para uma aplicação quando esta utiliza um grande número de objetos, quando os custos são altos devido a isso e quando muitos grupos de objetos podem ser substituídos por relativamente poucos objetos compartilhados.

Snapshot

O padrão Snapshot foi criado a partir de uma derivação do Memento e sua tradução seria "Instantâneo". O objetivo do padrão é capturar o estado de um objeto sendo possível resgatá-lo quando necessário. Sua aplicação está relacionada com processos demorados que necessitam ter seu estado gravado para retomar posteriormente, como por exemplo, um game de RPG, onde o jogador pode salvar o jogo em determinados momentos e retomar de um desses instantes. O Snapshot pode ser implementado de duas formas: através da Serialização (fluxo de bytes) ou do Memento.

Little Language

O little language é baseado no padrão Interpreter . Utilizado principalmente quando se tem uma tarefa recorrente, e de difícil execução, onde se cria uma "pequena linguagem" para a realização dessa tarefa de maneira mais simples e rápida. Tem sua aplicação quando se faz necessário tratar tipos de dados similares com um pequeno número de operações, mas inúmeras combinações diferentes.

O padrão define a criação de uma de uma estrutura, onde são realizadas operações léxicas e sintáticas de tal maneira que se facilita a inclusão de algum tipo de regra semântica para interpretar, posteriormente uma sentença através de uma arvore abstrata que irá ser gerada.

Para se construir um little language de uma maneira mais clara, é bom seguir alguns passos:
1. Definir a linguagem que será utilizada para a resolução do problema.
2. Criar regras léxicas e sintáticas, com suas respectivas regras de produção.
3. Implementação das classes necessárias que implementarão tal linguagem

Seguindo esses passos, a construção de um little language ficará mais fácil e intuitiva.