design patterns - gof

Download Design Patterns - GoF

Post on 11-Dec-2015

223 views

Category:

Documents

3 download

Embed Size (px)

TRANSCRIPT

  • Design PatternsA adoo dos padres ter um efeito profundo e duradouro sobre a forma de escrevermos programasWard Cunningham e Ralph Johnson

  • Design PatternsConhecer os princpios OO no faz de voc um bom projetista OOBons projetos OO so reutilizveis, extensveis e fceis de manterOs padres mostram como construir um projeto OO com estas qualidadesOs padres mostram solues OO comprovadamente eficientes

  • Design PatternsOs padres no so uma biblioteca de cdigo. Eles fornecem solues genricas para problemas de projeto. Voc tem de aplic-los a sua aplicao especfica.Os padres no so inventados, eles so descobertosA maioria dos padres aborda questes relativas a proteo contra variaesA maioria dos padres permite que parte do sistema varie independentemente de todas as outras partes

  • Design PatternsFreqentemente tentamos extrair e encapsular aquilo que varia em um sistemaOs padres fornecem uma linguagem compartilhada que permite maximizar o valor da sua comunicao com outros desenvolvedores

  • Design Patterns

  • O Adaptador

  • O AdaptadorO Adaptador converte a interface de uma classe em uma outra interface esperada pelo cliente.O Adaptador permite que classes com interfaces incompatveis trabalhem em conjunto o que, de outra forma, seria impossvel

  • O Adaptador

  • O Adaptador

  • O Adaptador

  • O Adaptador

  • O cdigo fonteVer arquivo Design Patterns\Adaptador\DadoNormal.java

  • Factory

  • O problema da Pizzaria: uma implementao pobre

  • O cdigo fonteVer arquivo Design Patterns\Factory\ImplementacaoPobre\Pizza.java

  • Uma fbrica simples

  • O cdigo fonteVer arquivo Design Patterns\Factory\SimpleFactory\Pizza.java

  • O mtodo fbrica

  • O mtodo fbricaDefine uma interface para criao de um objeto, mas deixa as subclasses definirem que classe instanciarO pattern "Factory Method" permite a uma classe delegar a instanciao s subclasses

  • AplicaesUma classe no pode antecipar a classe de objetos que deve ser criada Uma classe quer que suas subclasses especifiquem os objetos que ela cria Classes delegam responsabilidades para uma dentre vrias subclasses auxiliares, e deseja-se localizar o conhecimento de qual subclasse auxiliar implementa a delegao

  • O mtodo fbrica

  • ConseqnciasProv ganchos para as subclasses Conecta hierarquias de classes paralelas quando h delegao

  • O cdigo fonteVer arquivo Design Patterns\Factory\FactoryMethod\Pizza.java

  • Fbrica Abstrata

  • Fbrica AbstrataProv uma interface para a criao de famlias de objetos relacionados ou dependentes sem especificar suas classes concretas

  • AplicaesUm sistema deve ser independente de como seus elementos so criados, compostos e representados Um sistema deve ser configurado para trabalhar com uma nica famlia dentre mltiplas famlias de produtosUma famlia de produtos relacionados projetada para ser usada em conjunto, e h a necessidade de reforar essa restrioSe quer criar uma biblioteca de classes de produtos, revelando apenas suas interfaces e no suas implementaes

  • Uma fbrica abstrata

  • ConseqnciasIsola as classes concretas Facilita a troca de famlias de produtos Prove consistncia entre produtos Facilita o suporte a novos tipos de produtos

  • O cdigo fonteVer arquivo Design Patterns\Factory\AbstractFactory\Pizza.java

  • Singleton

  • SingletonGarante que uma classe tenha apenas uma instncia, ou um nmero controlado de instncias, e prov um ponto de acesso global a ela(s).

  • Aplicao usado quando:deve haver exatamente uma nica instncia de uma classe, e ela deve estar disponvel a todos os clientes a partir de um ponto de acesso bem definidoquando se deseja que a nica instncia possa ser estendida por herana, e os clientes serem capazes de utilizar essa instncia estendida sem terem de modificar o seu cdigo

  • Estrutura

  • ConseqnciasAcesso controlado instncia nica Espao de nomes reduzido Permite refinamento de operaes e representao via especializao Permite um nmero varivel de instncias Maior flexibilidade do que em operaes de classes

  • O cdigo fonteVer arquivo Design Patterns\Singleton\Pizza.java

  • Strategy

  • StrategyO padro Strategy define uma famlia de algoritmos intercambiveis e encapsula cada um deles fazendo com que eles possam ser permutveis.O padro Strategy permite que os algoritmos variem independentemente dos clientes que os utilizam

  • AplicaesUsado quando muitas classes relacionadas diferem apenas em alguns de seus comportamentosO padro Strategy prov uma maneira de configurar uma classe com um entre vrios comportamentos possveis

  • Estrutura

  • Trocando o comportamento em tempo de execuo

  • O cdigo fonteVer arquivosDesign Patterns\Strategy\ImplementacaoPobre\Teste.java

    Design Patterns\Strategy\ImplementacaoMelhor\Teste.java

    Design Patterns\Strategy\ComportamentoDinamico\Teste.java

  • Iterator

  • IteratorProv um modo de acessar seqencialmente elementos de um objeto agregado sem expor sua representao bsica

  • AplicaesServe para acessar o contedo de um objeto agregado sem expor sua representao internaPermite suportar mltiplas varreduras de objetos agregadosProv uma interface uniforme para varrer diferentes estruturas agregadas de forma polimrfica

  • Estrutura

  • ConseqnciasSimplifica a interface do agregadoMais de um caminho pode estar pendente em um agregado

  • O cdigo fonteVer arquivosDesign Patterns\Iterator\ImplementacaoPobre\Teste.java

    Design Patterns\Iterator\ImplementacaoMelhor\Teste.java

  • Composite

  • CompositeO padro a ser usado quando voc tem colees de objetos com um relacionamento todo-parte e voc quer ser capaz de tratar estes objetos uniformementeO padro Composite fornece uma estrutura para armazenar tanto objetos individuais como colees destes objetosO padro Composite permite aos clientes tratar objetos individuais e colees de objetos uniformemente

  • Composite

  • Exemplo

  • CompositeDefine uma hierarquia de classes que consiste de objetos individuais (Leaf) e objetos compostos (Composite).Um elemento da rvore qualquer objeto na estrutura do Composite. Elementos podem ser objetos individuais ou objetos compostos. Objetos compostos, por sua vez, podem ser constitudos de objetos individuais e outros objetos compostos, e assim por diante.Em qualquer ponto do cdigo cliente em que se espera um objeto individual, tambm pode ser usado um objeto composto.

  • CompositeO cliente pode tratar estruturas compostas e objetos individuais uniformemente.Os clientes normalmente no sabem (e no devem se preocupar) se eles esto tratando com um objeto individual ou composto.Permite a simplificao do cdigo do cliente, porque evita escrever funes que tenham que testar o tipo das classes que definem a composio.

  • CompositeTorna-se mais fcil adicionar novos tipos de componentes: basta que eles implementem a interface de um elemento da rvore.Novas definies das subclasses "Leaf" ou "Composite" trabalham automaticamente com as estruturas existentes e o cdigo do cliente.Os clientes no precisam ser modificados devido a criao de novas classes que implementem a interface.

  • O cdigo fonteVer arquivosDesign Patterns\Composite\Simples\Teste.java

    Design Patterns\ Composite\Sofisticada2\Teste.java

  • Facade

  • FacadeProv uma interface unificada para um conjunto de interfaces em um subsistema.Define uma interface de mais alto nvel que torna mais fcil o uso do subsistema.

  • AplicaesOferecer uma interface simples para um subsistema complexoExistem muitas dependncias entre clientes e as classes de implementao de uma abstrao.A introduo de um "Faade" ir desacoplar o subsistema dos clientes dos outros subsistemas, promovendo assim, a independncia e portabilidade desses subsistemas.

  • AplicaesQuando se deseja subsistemas em camadas.Use um "Faade" para definir um ponto de entrada para cada nvel do subsistema. Se os subsistemas so dependentes, ento pode-se simplificar a dependncia entre eles fazendo com que eles se comuniquem uns com os outros unicamente atravs dos seus "Faades".

  • A Biblioteca: Uma implementao pobre

  • A Biblioteca: Uma implementao pobre

  • A Biblioteca: Uma implementao melhor

  • A Biblioteca: Uma implementao melhor

  • ConseqnciasIsola os clientes dos componentes do subsistema, reduzindo desse modo o nmero de objetos com que o cliente interage, fazendo com que o subsistema seja muito mais fcil de se usar.Ajuda a estruturar o sistema em camadas. Promove um acoplamento fraco entre o subsistema e seus clientes.Geralmente os componentes de um subsistema so fortemente acoplados. Um baixo acoplamento entre subsistemas permite que se varie os componentes de um subsistema sem afetar seus clientes.

  • O Cdigo FonteVer arquivosDesign Patterns\Facade\ImplementacaoPobre\Usuario.java

    Design Patterns\ Facade\ImplementacaoMelhor\Usuario.java

  • Observer

  • ObserverO padro Observer define uma relao um para muitos entre objetosO objeto Observado atualiza os Observadores utilizando uma interface comum.O objeto Observado e os Observadores so fracamente acoplados na medida em que o objeto Observado no conhece os Observadores e nada sabe sobre eles a no ser que eles implementam a interface Observador.

  • ObserverO objeto observado pode enviar o seu estado aos observadores (push) ou disponibilizar mtodos de acesso para seus dados (pull). Pull geralmente considerado ma