padrões de desenho java
DESCRIPTION
Um resumo sobre os padrôes de desenho mais comuns em javaTRANSCRIPT
-
Composite
Problema: Pretende-se criar maneira de agrupar objectos num s ... possibilidade de interagir com um objecto ou um objecto composto de vrios, independentemente do caso. Quando se pretendem representar hierarquias parte-todo. Soluo: A ideia ter um objecto que agrega outro; podendo este ser uma composio ou um objecto simples. Cria uma estrutura do tipo rvore. Estrutura: Vantagens:
Cliente manipula objectos que podem ser composies ou objectos primitivos. Trata-os de forma uniforme
A composio feita recursivamente sem influncia do cliente. Facilidade na insero de elementos novos visto que o cliente manipula
um elemento genrico. Desvantagens:
Desenho pode ser demasiadamente geral o que pode trazer problemas se quiser impor restries aos elementos das composies.
-
Strategy
Problema: Definir uma famlia de algoritmos. Poder escolher qual o algoritmo que vamos usar para efectuar determinada operao. Adicionar algoritmos para resoluo do problema. Soluo: A ideia separar a implementao do algoritmo do cliente. So efectuadas as implementaes dos algoritmos em classes Strategy diferentes. Ambas tem uma interface comum. O cliente mantm uma referencia para cada maneira de resolver o problema (Strategy). Quando necessrio efectuar uma operao invocado a Strategy desejada. Estrutura:
Vantagens:
Atravs de herana pode-se factorizar os vrios algoritmos agrupando o que comum.
O algoritmo pode variar independentemente do contexto. Muito fcil a comutao de algoritmo e possvel extenso. Eliminam as instrues condicionais implicitas no cdigo. Fornece-se vrias solues para o mesmo problema sendo o cliente o
seleccionador. Desvantagens:
Os clientes ficam inerentes implementao. Tm que conhecer os algoritmos em causa S se deve utilizar quando realmente significativo para os clientes Podem ser criadas strategies que nunca vo ser utilizadas por parte do
cliente o que aumenta o numero de objectos criados.
-
Decorator
Problema: Adicionar responsabilidades a um objecto dinamicamente. Soluo: A ideia incluir a responsabilidade noutro objecto ao qual chamamos decorator. O decorador tem uma interface semelhante ao objecto para que se possa comportar como ele. Este reencaminha os pedidos ao objecto e efectua as suas tarefas. Estrutura:
Vantagens:
A transparncia permite garantir a imposio de um numero ilimitado de novas responsabilidades.
Muito fcil remover ou atribuir responsabilidades em run-time. Adio de uma propriedade duas vezes. Ex: duas bordas. No necessrio fazer uma classe para suportar todas as hipoteses e
combinaes possveis. Estes objectos so uma capa para os objectos reais usados apenas
para mudar o comportamento. Desvantagens:
Um decorador no um objecto da classe que decora mas sim um
objecto que contem um elemento da classe que decora.
-
Abstract Factory
Problema: Providenciar uma interface para criar famlias de objectos relacionados entre si sem necessidade de especificar as clases concretas. Soluo: Definir uma classe abstracta que define a interface para criar cada um dos tipos, uma classe abstracta por cada tipo, com subclasses concretas para cada tipo de sistema. Estrutura:
Vantagens:
Isola as classes concretas, separa os clientes da implementao das classes.
Facilita a troca de famlias de produtos. Promove a consistncia entre famlias de produtos.
Desvantagens:
difcil suportar novos tipos de famlias de produtos, visto ser preciso alterar a interface AbstractFactory.
-
Bridge
Problema: Separar a abstraco da sua implementao para que cada uma possa variar independentemente. Soluo: Separar as hierarquias de classes (abstraces e implementaes especficas). Todas as operaes ds subclasses so implementadas recorrendo s operaes abstractas. Chama-se bridge ao relacionamento entre as abstraces e as implementaes. Estrutura:
Vantagens:
Separa interface e implementao, eleminando dependncias de compilao.
Melhora a extensibiliade Esconde detalhes da implementao aos clientes
Desvantagens:
Parece que no h... ou ento no J
-
Command
Problema: Transformar um pedido num objecto. Filas de espera, lista de pedidos. Anular operaes previamente executadas. Soluo: Transformar pedidos em objectos. Estes pedidos (objectos) podem ser memorizados e enviados a outros objectos. Estrutura:
Vantagens:
Separa o objecto que invoca a operao do que sabe executar essa operao
Os comandos so objectos, que podem ser manipulados e estendidos Podem ser agregados em comandos compostos Facilita introduo de novos comandos Os comandos podem fazer a ligao entre o receptor e as aces ou
podem fazer logo tudo Suportam redo e undo visto que pode haver um metodo que indique
como desfeito ou refeito aquele comando. Desvantagens:
Parece que no h... ou ento no J
-
Template Method
Problema: Definir o esqueleto de um algoritmo, deixando a especificao de alguns passos para as sub-classes Soluo: Factorizar as partes comuns num template. Definir o que pode ser alterado na mesma template. As extenses template tm de definir o que no ficou especificado. Estrutura:
Vantagens:
Permite factorizar partes comuns Implementa um sistema de controlo, no qual a classe de base que
chama as classes derivadas Desvantagens:
Parece que no h... ou ento no J
-
Observer
Problema: Definir dependncias entre objectos do tipo um-para-muitos. Quando o objecto altera o seu estado, todos os objectos dependentes so notificados para poderem agir em conformidade Soluo: Um sujeito pode ter vrios observadores Estrutura:
Vantagens:
Permite variar Observers e Subjects de modo independente Permite adicionar Observers sem modificar o Observable ou outros
Observers A ligao entre elementos observaveis e observadores abstracta. O observvel s conhece a classe abstracta Observer. Podendo este
variar de vrias formas ( polimorfismo ) Permite comunicao broadcast que verifica o protocolo distribuio de
mensagens por todos os observers. Desvantagens:
A alterao do elemento observavel pode ter custos elevados. Uma operao bsica pode dar em muitas alteraes suprfluas.
-
Memento
Problema : Queremos ter a possibilidade de mudar o estado de um objecto sem violar o encapsulamento, sendo necessrio transportar o estado para fora do objecto sendo possvel repor. Soluo: Guardar o estado interno num objecto (Memento)
S o objecto original pode aceder ao seu memento. Quem manipula o Originator tem a responsabilidade de guardar os
possveis estados que lhe interessam e depois recorrendo ao originator , sim decidir restaurar qualquer dos estados anteriores. Estrutura:
Vantagens:
Preserva os limites do encapsulamento, evitando a divulgao de informao s referente e privada ao Originator.
Simplifica o originator Desvantagens:
O uso de mementos pode ser dispendioso em termos de estruturas de dados repetidas. Se o estado for muito complexo requere a repetio da mesma estrutura para o memento.
Pode ser dificil garantir que s o Originator acede ao seu memento visto que estes so geridos pela aplicao (caretaker).
A gesto dos mementos pode ser dificil visto que o caretaker no conhece o seu conteudo, e pode remover estados antigos que depois lhe interessem.
-
State
Problema : Queremos ter a possibilidade de mudar de comportamento consoante o estado interno de um objecto. Exemplo temos o caso de um diagrama de estados. Consoante o estado onde estamos temos comportamentos diferentes. Soluo: Representa-se cada estado com um objecto. Quando um objecto quer alterar o seu comportamento, muda de estado. ( troca de objecto) No Estado define-se o comportamento do objecto quando aquele estado o activo.
Estrutura:
Vantagens:
Localiza num objecto estado o comportamento especifico aquele estado. As mudanas de estado so explicitas Pode-se partilhar estados. Perca de instrues condicionais verificando qual o estado actual para
atingir determinado comportamento
Desvantagens:
Parece que no h... ou ento no J
PSDR e SFBS @ LEIC @ IST 2003