Poderíamos
dizer, de forma sucinta, que um design pattern "é uma
solução para um problema em um determinado contexto", onde:
- Contexto se
refere ao conjunto de situações que se repetem, nas quais o design
pattern pode ser aplicado;
- Problema se refere ao conjunto de "forças" –
objetivos e limitações – que ocorrem dentro do contexto;
- Solução é uma estrutura formal para ser aplicada na
resolução do problema.
Creational Patterns
◦ Prove
uma interface para a criação de família de objetos relationados ou dependentes
sem especificar as suas classes concretas
◦ Permite
que o cliente instancie a classe sem se preocupar com a classe concreta. Prove uma interface para criação do
objeto. DAOFactory.
·
Builder
(Construção de objetos com várias partes)
◦ Separa
a construção de um objeto complexo das suas representações de forma que o mesmo
processo de construção possa criar diferentes representações.
◦ Possui
vários métodos parar criar um conjunto de objetos para construir um objeto
complexo com várias partes. Separa a
construção de um objeto complexo da sua representação. Esse processo cria diferentes representações.
◦ Define
uma interface de criação de um objeto, mas deixa a subclasse decidir quais
classes instanciar. Factory Method deixa
a classe que a usa definir a instanciação das subclasses.
◦ Define
uma interface de criação de um objeto, mas permite que subclasse decida qual
classe instanciar. DAO
◦ Especifica
qual tipo de objetos devem ser criados usando uma instância prototipada e cria novos
objetos pela cópia desse protótipo.
◦ Define
um conjunto de valores iniciais para um objeto instanciado e cria novos objetos
copiando desse protótipo.
◦ Garante
que somente uma instancia da classe foi criada.
Provê um ponto global de acesso ao objeto.
Structural Patterns
◦ Converte
a interface de uma classe em outra interface que o cliente espera. Cria classes intermediárias quando duas
classes não conseguem conversar, para que a classe cliente entenda a primeira.
◦ Cria
classes intermediárias quando duas classes não conseguem conversar e assim a
classe cliente possa entender a primeira.
◦ Para
resolver incompatibilidade de classes.
Feita depois do Design. Ex:
Wrapper.
◦ Geralmente
não se faz por herança
·
Bridge (Faz as
interfaces conversarem -
Polimorfismo)
◦ Desacopla
uma abstração de sua implementação. Faz classes construídas independentemente
trabalharem juntas. Assim as
implementações podem variar independentemente.
Provê interface estável para os clientes. Antes do Design. É o próprio polimorfismo.
·
Composite
(Composição de objeto em forma de árvore)
◦ Compõe
objetos em uma estrutura de árvore para representar hierarquias
“parte-todo”. Composite deixa o cliente
tratar objetos individuais e composições de objetos uniformemente.
◦ Compõe
objetos para que o conjunto de objetos seja visto como um só. Subclasse aponta para o pai. Objetos na estrutura de árvore para
representar hierarquia parte-todo.
·
Decorator
(Adiciona responsabilidade dinamicamente sem criar subclasses)
◦ Usado
para adicionar responsabilidade dinamicamente.
Alternativa para a criação novas subclasses para a extensão de
funcionalidades. Exemplo da inclusão da
Scroll Bar.
◦ Herda
do pai e também cria novas responsabilidades em um método. Geralmente usa o super.method()
◦ Prove
uma interface única para um conjunto de interfaces de um sistema. Define uma interface de alto nível e deixa o
sistema mais simples usar. Parece com o
Mediator, só que é uma única direção.
◦ Provê
uma classe com métodos que chamam outras com uma interface de fachada.
◦ Compartilhamento
de objetos por várias clientes. Usado
quando possui grande número de objetos iguais.
Ex: Texto. Teclado.
◦ Prove
um delegado(representante) para outros objeto controlar o seu acesso. É um objeto que encapsula o objeto Real para
protegê-lo de algum forma ou realizar algum processamento anterior. Ex: Corba.
Behavioral Patterns
◦ Evita
acoplamento do sender de request para o
receiver dando chances para ele lidar com o request.
◦ Uma
lista de objetos que passa a requisição entre eles fazendo com que somente os
responsáveis cuidem da requisição. Ex: Tomcat no tratamento de requisições,
tratamento de eventos.
◦ Emcapsula
o request como um objeto. Permite que o
cliente parametrize a chamada ao objeto.
◦ Uma
classe que possui o método execute. Essa
classe foi configurada anteriormente e seu cliente não precisa saber do seu conteúdo. ex: Undo
◦ Dá
uma linguagem, define a representação para a gramática a ser seguida e um
interpretador que use essa representação.
◦ Interpreta
uma sentença. Ex: expressão regular.
◦ Provê
uma forma de acesso a elementos de um objeto agregado sequencialmente sem expor
a sua representação interna.
◦ Permite
percorrer uma lista de diferentes formas, sem expor a representação interna da
lista.
◦ Objeto
intermediário que define como um conjunto de objetos vão se interagir. Facilita o reuso na comunicação e diminui o
acoplamento. Os objetos só se conhecem
através do mediator reduzindo o acoplamento.
Colegas enviam e recebem mensagem do Mediator. ex: Dialog Box, Servlet(Front
Controller). Evita que objetos se
comuniquem em exagero. Simplifica a
comunicação entre objetos e controla a comunicação.
◦ Captura
e externaliza o estado interno de um objeto sem violar o encapsulamento. Assim, o objeto pode ter seu estado
restaurado posteriormente.
◦ Guarda
o estado. Um organizador cria o memento
e passar o seu estado para que ele possa ser restaurado. Pode criar grande overhead se salvar muita
informação. ex: Undo
◦ Define
uma forma de vários objetos poderem ser notificados de uma mudança através de
uma dependência um-para-muitos.
◦ Permite
um objeto alterar o seu comportamento quando seu estado interno modificar. O objeto parecerá ter mudado sua classe.
◦ Geralmente
o objeto tem aponta para uma interface que define o comportamento. Dependendo da classe que ele apontar o
comportamento do objeto é um.
◦ Define
uma família de algoritmos, os encapsula e os faz imutáveis. Strategy deixa o algoritmo mudar dependendo
do cliente.
◦ Define
uma interface com a assinatura do algoritmo.
A herança determina qual algoritmo será usado. O cliente só conhece a interface. Permite que o algoritmo varie
independentemente dos clientes.
◦ Defina
um esqueleto de um algoritmo e alguns passos são definidos nas subclasses. Método que parte de um algoritmo está na
classe pai e outra parte nas classes filhas.
◦ Representa
uma operação a ser realizada nos elementos de uma estrutura de um objeto. Visitor te deixa definir uma nova operação
sem mudar a classe dos elementos na qual operam.
◦ Permite
que se criem vários métodos para que um visitor o use nas classes
visitadas. Utiliza uma espécie de
observer. O objeto visitado usa um
accept(Visitor v) para aceitar o visitor.
Então o visitor tem acesso parcial à estrutura do objeto visitado.
◦
Nenhum comentário:
Postar um comentário