O documento define padrões como soluções permanentes para problemas recorrentes em determinado contexto. Ele descreve alguns padrões de criação como Singleton, Factory Method e Builder, que tratam da criação de objetos, e o padrão Prototype, que permite a criação de novos objetos copiando um protótipo existente. Além disso, classifica os padrões de acordo com sua finalidade e escopo.
O documento discute o padrão Singleton, que garante a criação de uma única instância de uma classe e fornece um ponto global de acesso a ela. Isso é feito através de um construtor privado e um método estático getInstance() que retorna a instância única. O padrão é útil quando precisamos de acesso global a um único objeto ou recurso compartilhado.
O Abstract Factory é um padrão de projeto que permite criar famílias de objetos relacionados sem especificar suas classes concretas. Ele delega a criação de objetos para subclasses ConcreteFactory que retornam objetos compatíveis entre si. Isso garante consistência entre produtos e facilita a troca de famílias de produtos.
O documento apresenta um workshop sobre Design Patterns, abordando sua introdução e alguns padrões como Factory, Abstract Factory, Singleton, Adapter, Facade e MVC. A agenda inclui antes de começar, introdução, cuidados e tipos de padrões como creacionais, estruturais e comportamentais.
O documento descreve o padrão de projeto Prototype, que permite a criação de objetos a partir de um modelo original através da cópia de um protótipo. O padrão contém um protótipo, classes concretas de protótipo e um cliente. Ele é útil quando objetos precisam ser criados de forma independente e em sistemas com classes definidas em tempo de execução.
O documento descreve o padrão de projeto Prototype, que permite a criação de objetos a partir de um modelo original através da cópia desse protótipo. Ele especifica os tipos de objetos a serem criados usando uma instância-protótipo e cria novos objetos pela cópia desse protótipo, com cada objeto sendo um factory especializado em construir objetos iguais a si mesmo.
O documento descreve padrões de projeto criacionais que abstraem como objetos são criados e compostos, permitindo maior flexibilidade e reuso de código. Exemplos de padrões criacionais incluem Factory Method e Abstract Factory. O documento também apresenta um exemplo de aplicação desses padrões em um jogo de labirinto.
O documento descreve o padrão de projeto Factory Method, que define uma interface para criar objetos mas deixa as subclasses decidirem quais classes instanciar. O padrão é útil quando uma classe não pode antecipar quais objetos criar ou quando subclasses devem especificar quais objetos criar.
O padrão Abstract Factory fornece uma interface para criar famílias de objetos relacionados sem especificar suas classes concretas. Ele promove a consistência entre produtos e facilita a permuta entre famílias de produtos. O padrão também isola classes concretas para facilitar a adição de novos tipos de produtos.
O documento discute o padrão Singleton, que garante a criação de uma única instância de uma classe e fornece um ponto global de acesso a ela. Isso é feito através de um construtor privado e um método estático getInstance() que retorna a instância única. O padrão é útil quando precisamos de acesso global a um único objeto ou recurso compartilhado.
O Abstract Factory é um padrão de projeto que permite criar famílias de objetos relacionados sem especificar suas classes concretas. Ele delega a criação de objetos para subclasses ConcreteFactory que retornam objetos compatíveis entre si. Isso garante consistência entre produtos e facilita a troca de famílias de produtos.
O documento apresenta um workshop sobre Design Patterns, abordando sua introdução e alguns padrões como Factory, Abstract Factory, Singleton, Adapter, Facade e MVC. A agenda inclui antes de começar, introdução, cuidados e tipos de padrões como creacionais, estruturais e comportamentais.
O documento descreve o padrão de projeto Prototype, que permite a criação de objetos a partir de um modelo original através da cópia de um protótipo. O padrão contém um protótipo, classes concretas de protótipo e um cliente. Ele é útil quando objetos precisam ser criados de forma independente e em sistemas com classes definidas em tempo de execução.
O documento descreve o padrão de projeto Prototype, que permite a criação de objetos a partir de um modelo original através da cópia desse protótipo. Ele especifica os tipos de objetos a serem criados usando uma instância-protótipo e cria novos objetos pela cópia desse protótipo, com cada objeto sendo um factory especializado em construir objetos iguais a si mesmo.
O documento descreve padrões de projeto criacionais que abstraem como objetos são criados e compostos, permitindo maior flexibilidade e reuso de código. Exemplos de padrões criacionais incluem Factory Method e Abstract Factory. O documento também apresenta um exemplo de aplicação desses padrões em um jogo de labirinto.
O documento descreve o padrão de projeto Factory Method, que define uma interface para criar objetos mas deixa as subclasses decidirem quais classes instanciar. O padrão é útil quando uma classe não pode antecipar quais objetos criar ou quando subclasses devem especificar quais objetos criar.
O padrão Abstract Factory fornece uma interface para criar famílias de objetos relacionados sem especificar suas classes concretas. Ele promove a consistência entre produtos e facilita a permuta entre famílias de produtos. O padrão também isola classes concretas para facilitar a adição de novos tipos de produtos.
Este documento discute testes unitários, TDD (Desenvolvimento Guiado por Testes) e ferramentas de teste. Ele explica que testes unitários testam unidades individuais de código isoladamente, TDD envolve escrever testes antes do código, e ferramentas como JUnit e TestNG automatizam a execução de testes.
O documento resume alguns padrões de projeto creacionais e estruturais, como Abstract Factory, Builder, Factory Method, Prototype, Singleton, Adapter, Bridge, Composite e Decorator. Ele descreve o propósito e aplicações de cada padrão.
O documento discute técnicas de reuso em Java, como herança e composição. Apresenta quando usar cada uma e como implementá-las corretamente, incluindo o uso de modificadores como public, protected, private e final.
Este documento introduz a programação orientada a objetos e sua implementação em Java. Ele explica como a abordagem OO modela o mundo real em termos de objetos e classes, definindo atributos e métodos para representar características e comportamentos. Também descreve como classes criam objetos em Java e como esses objetos se comunicam através de mensagens.
O documento resume um workshop sobre ExtJS 4 e PHP ministrado pela School of Net. A agenda inclui tópicos como debugando código JavaScript, voltando aos fundamentos da linguagem como tipos, operadores e escopo, e conceitos importantes como namespaces e prototype.
Este documento apresenta as técnicas de teste unitário, introduzindo o framework TestNG e Mockito. Aborda como stubs e mocks ajudam a quebrar dependências e tornar o código mais testável através de refatoração.
O documento descreve o padrão de projeto Factory Method. Ele define uma interface para criar objetos, mas deixa que as subclasses decidam qual classe instanciar. O padrão permite que uma classe delegue a responsabilidade de instanciação às subclasses.
O documento discute testes unitários, apresentando: 1) O que são testes unitários e seus benefícios; 2) Como escrever testes unitários usando JUnit e frameworks de mock como Mockito e PowerMock.
O documento fornece uma introdução aos principais conceitos da programação orientada a objetos, incluindo a história do paradigma, analogia biológica, princípios, classes, objetos, associações, herança, polimorfismo e outras características-chave.
Este documento apresenta os conceitos básicos de programação orientada a objetos em Java. Aborda tópicos como classes, objetos, atributos, métodos, variáveis locais e globais. Inclui exemplos de como declarar classes, criar objetos, definir métodos e utilizar modificadores de acesso.
1) O documento discute técnicas de reutilização de código em Java, como composição e herança.
2) A herança permite criar novas classes estendendo classes existentes, heradando atributos e métodos.
3) O polimorfismo separa o que é feito do como é feito, definindo métodos com mesmo nome em classes diferentes.
O documento discute os conceitos básicos de programação orientada a objetos em Java, incluindo classes, objetos, atributos, métodos, notação CamelCase e como criar e utilizar classes, objetos, atributos e métodos.
Java - Aula 4 - Sobrecarga de construtores, UML e HerançaMoises Omena
O documento discute conceitos de programação orientada a objetos em Java, incluindo classes, atributos, métodos, herança, polimorfismo e diagrama de classes. Ele apresenta exemplos de como criar classes Pessoa, Aluno e Professor com herança, definindo atributos e métodos para cada uma.
O documento apresenta os fundamentos da programação orientada a objetos. Resume os principais conceitos como objetos, classes, encapsulamento, herança e polimorfismo. Explica a diferença entre a programação estruturada e orientada a objetos.
Identificar objetivos de usabilidade e experiência do usuário é essencial para o sucesso de produtos. O documento discute vários paradigmas de avaliação como testes de usabilidade, estudos de campo e avaliação preditiva, além de técnicas como observação de usuários e entrevistas. O framework DECIDE fornece uma lista de verificação para guiar avaliações, considerando metas, questões, paradigmas, aspectos práticos e éticos.
Introdução à análise orientada a objetos parte 1ariovaldodias
O documento apresenta os principais conceitos de análise orientada a objetos (AOO), incluindo classes, objetos, atributos, métodos, encapsulamento, herança e diagrama de classes. Também discute a evolução das classes ao longo do projeto e a importância do reuso em programação orientada a objetos.
Componentes Transformers: Combinando o melhor de cada frameworkFlávio Lisboa
Inicialmente trataremos sobre padrões de construção de componentes, para então falar sobre interoperabilidade entre aplicações PHP e bibliotecas de componentes interoperáveis. Finalmente mostraremos exemplos de combinações de componentes de diferentes frameworks.
O documento apresenta uma introdução sobre Design Patterns, descrevendo os desafios da área de software e a necessidade de padrões para resolver problemas comuns. Apresenta os 23 padrões descritos no livro "Design Patterns" divididos em três categorias: Criação, Estrutura e Comportamento. Resume cada categoria listando os padrões e suas finalidades.
Introdução à análise orientada a objetos parte 6ariovaldodias
O documento discute padrões de software e apresenta uma atividade final sobre o tema. Os alunos devem produzir um trabalho em PowerPoint e texto resumido sobre padrões de software, incluindo padrões estruturais, comportamentais e de criação, além da "Gangue dos Quatro". O material produzido será distribuído e discutido em classe na aula seguinte.
TDC 2013 SP | Arquitetura Java: Preciso de um Framework, mas qual usar?tdc-globalcode
O documento fornece uma visão geral de vários frameworks Java, incluindo servidores, IDEs, estruturas de visão, negócios e infraestrutura. Ele discute as vantagens e desvantagens de frameworks populares como Struts, JSF, Spring e Hibernate e fornece links para benchmarks e relatórios que comparam o desempenho e popularidade desses frameworks.
Este documento discute testes unitários, TDD (Desenvolvimento Guiado por Testes) e ferramentas de teste. Ele explica que testes unitários testam unidades individuais de código isoladamente, TDD envolve escrever testes antes do código, e ferramentas como JUnit e TestNG automatizam a execução de testes.
O documento resume alguns padrões de projeto creacionais e estruturais, como Abstract Factory, Builder, Factory Method, Prototype, Singleton, Adapter, Bridge, Composite e Decorator. Ele descreve o propósito e aplicações de cada padrão.
O documento discute técnicas de reuso em Java, como herança e composição. Apresenta quando usar cada uma e como implementá-las corretamente, incluindo o uso de modificadores como public, protected, private e final.
Este documento introduz a programação orientada a objetos e sua implementação em Java. Ele explica como a abordagem OO modela o mundo real em termos de objetos e classes, definindo atributos e métodos para representar características e comportamentos. Também descreve como classes criam objetos em Java e como esses objetos se comunicam através de mensagens.
O documento resume um workshop sobre ExtJS 4 e PHP ministrado pela School of Net. A agenda inclui tópicos como debugando código JavaScript, voltando aos fundamentos da linguagem como tipos, operadores e escopo, e conceitos importantes como namespaces e prototype.
Este documento apresenta as técnicas de teste unitário, introduzindo o framework TestNG e Mockito. Aborda como stubs e mocks ajudam a quebrar dependências e tornar o código mais testável através de refatoração.
O documento descreve o padrão de projeto Factory Method. Ele define uma interface para criar objetos, mas deixa que as subclasses decidam qual classe instanciar. O padrão permite que uma classe delegue a responsabilidade de instanciação às subclasses.
O documento discute testes unitários, apresentando: 1) O que são testes unitários e seus benefícios; 2) Como escrever testes unitários usando JUnit e frameworks de mock como Mockito e PowerMock.
O documento fornece uma introdução aos principais conceitos da programação orientada a objetos, incluindo a história do paradigma, analogia biológica, princípios, classes, objetos, associações, herança, polimorfismo e outras características-chave.
Este documento apresenta os conceitos básicos de programação orientada a objetos em Java. Aborda tópicos como classes, objetos, atributos, métodos, variáveis locais e globais. Inclui exemplos de como declarar classes, criar objetos, definir métodos e utilizar modificadores de acesso.
1) O documento discute técnicas de reutilização de código em Java, como composição e herança.
2) A herança permite criar novas classes estendendo classes existentes, heradando atributos e métodos.
3) O polimorfismo separa o que é feito do como é feito, definindo métodos com mesmo nome em classes diferentes.
O documento discute os conceitos básicos de programação orientada a objetos em Java, incluindo classes, objetos, atributos, métodos, notação CamelCase e como criar e utilizar classes, objetos, atributos e métodos.
Java - Aula 4 - Sobrecarga de construtores, UML e HerançaMoises Omena
O documento discute conceitos de programação orientada a objetos em Java, incluindo classes, atributos, métodos, herança, polimorfismo e diagrama de classes. Ele apresenta exemplos de como criar classes Pessoa, Aluno e Professor com herança, definindo atributos e métodos para cada uma.
O documento apresenta os fundamentos da programação orientada a objetos. Resume os principais conceitos como objetos, classes, encapsulamento, herança e polimorfismo. Explica a diferença entre a programação estruturada e orientada a objetos.
Identificar objetivos de usabilidade e experiência do usuário é essencial para o sucesso de produtos. O documento discute vários paradigmas de avaliação como testes de usabilidade, estudos de campo e avaliação preditiva, além de técnicas como observação de usuários e entrevistas. O framework DECIDE fornece uma lista de verificação para guiar avaliações, considerando metas, questões, paradigmas, aspectos práticos e éticos.
Introdução à análise orientada a objetos parte 1ariovaldodias
O documento apresenta os principais conceitos de análise orientada a objetos (AOO), incluindo classes, objetos, atributos, métodos, encapsulamento, herança e diagrama de classes. Também discute a evolução das classes ao longo do projeto e a importância do reuso em programação orientada a objetos.
Componentes Transformers: Combinando o melhor de cada frameworkFlávio Lisboa
Inicialmente trataremos sobre padrões de construção de componentes, para então falar sobre interoperabilidade entre aplicações PHP e bibliotecas de componentes interoperáveis. Finalmente mostraremos exemplos de combinações de componentes de diferentes frameworks.
O documento apresenta uma introdução sobre Design Patterns, descrevendo os desafios da área de software e a necessidade de padrões para resolver problemas comuns. Apresenta os 23 padrões descritos no livro "Design Patterns" divididos em três categorias: Criação, Estrutura e Comportamento. Resume cada categoria listando os padrões e suas finalidades.
Introdução à análise orientada a objetos parte 6ariovaldodias
O documento discute padrões de software e apresenta uma atividade final sobre o tema. Os alunos devem produzir um trabalho em PowerPoint e texto resumido sobre padrões de software, incluindo padrões estruturais, comportamentais e de criação, além da "Gangue dos Quatro". O material produzido será distribuído e discutido em classe na aula seguinte.
TDC 2013 SP | Arquitetura Java: Preciso de um Framework, mas qual usar?tdc-globalcode
O documento fornece uma visão geral de vários frameworks Java, incluindo servidores, IDEs, estruturas de visão, negócios e infraestrutura. Ele discute as vantagens e desvantagens de frameworks populares como Struts, JSF, Spring e Hibernate e fornece links para benchmarks e relatórios que comparam o desempenho e popularidade desses frameworks.
Orientação a Objetos - Da Teoria a Praticaelliando dias
Este documento fornece uma introdução aos principais tópicos relacionados à reutilização de projetos e software em Java, incluindo padrões de projeto, frameworks, componentes e objetos distribuídos. Exemplos de padrões como Observer, State e Composite são discutidos, assim como frameworks MVC e pacotes Java.
O documento descreve a história da banda de heavy metal Black Sabbath, incluindo suas principais formações e membros ao longo dos anos, como Ozzy Osbourne, Tony Iommi e Geezer Butler. Detalha também os principais álbuns lançados por cada formação entre 1968 e 1995, quando a banda teve 10 formações diferentes ao longo do tempo.
Este documento discute as opções de frameworks Java para desenvolvimento web e como escolher entre elas. Ele apresenta alguns frameworks populares como Struts, JSF e Wicket e discute considerações como curva de aprendizado, maturidade e suporte da comunidade. O documento conclui enfatizando que não há uma única solução certa e que cada projeto deve escolher o framework mais adequado à sua situação em particular, evitando sempre frameworks caseiros.
Sete Passos Para Um Programador De SucessoPlaneta Código
O documento descreve sete passos para se tornar um programador de sucesso: 1) Aprender lógica de programação, que é a base para programação; 2) Escolher uma linguagem de programação como Java, PHP, Python ou Ruby; 3) Aprender sobre banco de dados como MySQL ou SQLite; 4) Estudar padrões de projeto para desenvolver códigos de qualidade; 5) Utilizar frameworks para aumentar produtividade; 6) Conhecer metodologias ágeis de desenvolvimento; 7) Dedicar-se à arquitetura e qualidade do software
Este documento descreve o padrão de projeto Singleton e fornece detalhes sobre sua definição, motivação, características de uso e implementação. O padrão Singleton garante que uma classe só tenha uma única instância e fornece um ponto global de acesso a ela.
O documento discute o padrão de projeto Singleton, que garante que apenas uma instância de uma classe seja criada. Ele explica que o Singleton é um padrão criacional útil quando objetos como pools de conexão ou registros precisam ser instanciados apenas uma vez. O documento fornece um exemplo de como implementar o padrão Singleton em código, usando um atributo estático e um método getInstance() para retornar a única instância.
O documento discute os principais conceitos da programação orientada a objetos, incluindo objetos, classes, atributos, comportamentos, métodos, mensagens, relacionamentos entre objetos e vantagens da POO. As classes definem os atributos e comportamentos compartilhados por objetos de um determinado tipo, enquanto os métodos implementam as operações de uma classe.
O documento discute os conceitos fundamentais de orientação a objetos em Java, incluindo: 1) Definições de classes, objetos, encapsulamento e herança; 2) Como criar objetos a partir de classes e compartilhar dados entre objetos; 3) Como definir métodos e construtores em classes.
1) O documento discute padrões de projetos orientados a objetos, especificamente padrões estruturais e comportamentais. 2) Padrões estruturais como Decorator e Facade tratam de como classes e objetos são compostos para formar estruturas maiores, enquanto padrões comportamentais como Observer e Strategy tratam de algoritmos e responsabilidades entre objetos. 3) Exemplos e diagramas são fornecidos para ilustrar como cada padrão é aplicado na prática.
O documento descreve o padrão de projeto Abstract Factory. O padrão fornece uma interface para criação de famílias de objetos relacionados sem especificar suas classes concretas, permitindo que sistemas sejam independentes de como seus produtos são criados e representados. O padrão isola classes concretas dos clientes e facilita a troca de famílias de produtos.
O documento descreve a história e conceitos dos padrões de projeto orientados a objetos. Christopher Alexander cunhou o termo "padrões de projeto" para descrever soluções comuns a problemas recorrentes. Os padrões GoF tornaram-se populares em 1995 e descrevem padrões criacionais, estruturais e comportamentais.
O documento descreve o padrão de projeto Abstract Factory, que fornece uma interface para criação de objetos delegando instanciações para subclasses. Ele é aplicado em um cenário de serviços bancários de um caixa eletrônico, onde a fábrica abstrata cria produtos como extratos e saldos de forma diferente para cada banco concreto, mantendo a aplicação cliente independente de implementações específicas.
1) O padrão Singleton assegura que uma classe tenha apenas uma instância e provê um ponto de acesso global a ela.
2) A classe Singleton define uma operação estática Instance que retorna sempre a mesma instância única da classe e intercepta tentativas de criação de novas instâncias.
3) O exemplo mostra como aplicar o padrão Singleton para garantir que haja apenas uma instância da classe MazeFactory, permitindo extensão via subclasses.
O documento descreve o padrão de projeto Estado, que permite que um objeto altere seu comportamento de acordo com mudanças internas de estado. Isso é feito definindo classes concretas para cada estado possivel e delegando responsabilidades para essas classes conforme o estado muda, permitindo que o objeto "pareça mudar de classe".
1) O documento apresenta conceitos avançados de Java, incluindo exceções, Java Beans, métodos da classe Object como toString() e equals(), e coleções.
2) É explicado como implementar singletons em Java para garantir uma única instância de uma classe.
3) Exceções são apresentadas como uma forma de indicar condições anormais no programa, e é mostrado como tratá-las com blocos try-catch.
O documento descreve a história e conceitos de padrões de projeto de software. Apresenta os 23 padrões de projeto documentados no livro "Design Patterns" de 1995, divididos nas categorias criacionais, comportamentais e estruturais. Explica brevemente alguns padrões como Singleton, Factory Method, Observer, Composite e MVC.
O documento discute princípios de programação orientada a objetos como SOLID e padrões de projeto. Aborda conceitos como inversão de controle, injeção de dependência e desenvolvimento orientado a testes.
O documento explica o que são padrões de projeto, alguns padrões identificados e como aplicá-los no desenvolvimento de software. Apresenta os benefícios e desafios do uso de padrões, como facilitar a reutilização de código e a manutenção do software.
Este documento discute o padrão de projeto Factory. Ele define Factory como uma interface ou classe abstrata para criar objetos, deixando subclasses decidirem qual classe instanciar. Dois exemplos são fornecidos para ilustrar como o padrão Factory pode ser usado para criar objetos de forma dinâmica sem conhecer a classe de implementação.
qualidade de código: boas práticas, princípios e padrõesedgarddavidson.com
O documento discute boas práticas de qualidade de código, incluindo princípios como baixo acoplamento e alta coesão. Também aborda padrões de projeto orientado a objetos e códigos cheirosos, além de técnicas como teste unitário e refatoração para melhorar a qualidade do código.
Este documento descreve os principais padrões de projeto de software, incluindo padrões criacionais, estruturais e comportamentais. Os padrões criacionais abordados são Abstract Factory, Builder e Prototype. Os padrões estruturais incluem Adapter, Bridge e Composite. Os padrões comportamentais discutidos são Chain of Responsibility, Command e Observer.
O documento discute padrões de projeto de software, especificamente Abstract Factory, Builder e Prototype. Ele descreve quando cada um deve ser usado, como eles se relacionam e como evoluir entre eles conforme as necessidades de flexibilidade do sistema.
O documento discute padrões de projeto comumente usados em jogos, incluindo Builder, State, Command, Memento, Mediator e Observer. É explicado o que são padrões de projeto e suas categorias, além de diagramas de classe e sequência e casos de uso para cada um desses padrões.
1. Pattern - Definição
O que é um Padrão (Pattern) ?
• Define padrão como uma solução permanente para um
problema em um contexto. Contexto é o ambiente ,
circunstancias, situação ou condições interdependentes dentro
do qual algo existe.
O que é uma Estratégia ?
- Os padrões são descritos em um nível alto de Abstração. Ao mesmo
tempo cada padrão inclui várias estratégias que fornecem detalhes de
implementação em diversos níveis de abstração.
GOF
- Os padrões GoF (Gamma et al., 1994) formam um catálogo de boas
- decisões de projeto.
2. Classificação dos Patterns
•Padrões de Criação (Creational)
• Abstract Factory, Builder, Factory Method, Prototype, Singleton.
•Padrões de Estrutura (Structural)
• Adapter, Bridge, Composite, Decorator, Facade, Flyweight, Proxy.
•Padrões de Comportamento(Behavioral)
• Chain of Responsability, Command, Interpreter, Iterator, Mediator,
Memento, Observer, State, Strategy, Template Method, Visitor.
3. GOF
Propósito
Criação Estrutura Comportamento
Escopo
Classe Factory Method Class Adapter
Interpreter
Template Method
Objeto
Abstract Factory Object Adapter Chain of Responsibility
Builder Bridge Command
Prototype Composite Iterator
Singleton Decorator Mediator
Factory Method Facade Memento
Flyweight Observer
Proxy State
Strategy
Visitor
Classificando os Patterns
5. Patterns de Criação
• Singleton: Garantir que uma classe só tenha uma única instância, e
prover um ponto de acesso global a ela.
• Factory Method: Definir uma interface para criar um objeto mas
deixar que subclasses decidam que classe instanciar.
• Abstract Factory : Definir uma interface para criar famílias de
objetos relacionados ou dependentes sem especificar suas classes
concretas
• Builder : Separar a construção de objeto complexo da
representação para criar representações diferentes com mesmo
processo.
• Prototype : Especificar tipos a criar usando uma instância como
protótipo e criar novos objetos ao copiar este protótipo.
6. Pattern Singleton
• Intenção: Você deseja ter somente um objeto de uma classe, mas não existe
nenhum objeto global que controle a instanciação deste objeto
• Problema: Vários objetos Clientes deferentes precisam se referir ao mesmo
objeto e você deseja assegurar que não terá mais de um deles.
• Solução: Garantir a existência de uma única instância para este objeto.
• Participantes: Clientes que criam uma instancia da classe Singleton tão-
somente por meio de um método getInstance().
9. Diagrama
• O Cliente nunca terá acesso ao construtor da classe Singleton,
somente ao método getInstance que garantirá uma única
instancia desta classe.
• Exemplo de um método cliente de Singleton.
1. SingletonImplementation singleton =
2.
SingletonImplementation.getInstance();
10. Patterns de Criação
• Singleton: Garantir que uma classe só tenha uma única instância, e
prover um ponto de acesso global a ela.
• Factory Method: Definir uma interface para criar um objeto mas
deixar que subclasses decidam que classe instanciar.
• Abstract Factory : Prover interface para criar famílias de objetos
relacionados ou dependentes sem especificar suas classes concretas
• Builder : Separar a construção de objeto complexo da
representação para criar representações diferentes com mesmo
processo.
• Prototype : Especificar tipos a criar usando uma instância como
protótipo e criar novos objetos ao copiar este protótipo.
11. Factory Method
• Intenção : Definir uma interface para criar um objeto, deixando,
porem que as subclasses decidam qual classe instanciar. Delegar a
instanciação para as subclasses.
• Problema: Uma classe precisa de instanciar uma derivação de uma
outra mas não sabe qual. O FactoryMethod permite que uma classe
derivada tome esta decisão.
• Solução: Uma classe derivada decide qual classe instanciar e o
modo como instanciá-la.
• Participantes: Produto é a interface para o tipo de objeto que o
Factory Method cria. Gerador é a interface que decide o
FactoryMethod.
12. Factory Method
É uma interface para instanciação de objetos que
mantém isoladas as classes concretas usadas da
requisição da criação destes objetos.
• Separa assim:
• Uma “família” de classes dotadas da mesma interface
(“produtos”); e
• Uma classe (“fábrica”) que possui um método especial
(o factory method) que cria tais objetos.
14. class Test{
public static void
main(String a[] ){
Creator c ;
// If A is needed
c = new ConcreteCreatorA() ;
// else
c = new
ConcreteCreatorB() ;
Product p = c.create() ;
}
}
• abstract class Product{
...
}
class ConcreteProductA extends Product{
...
}
class ConcreteProductB extends Product{
...
}
• --------------------
• abstract class Creator{
public abstract Product create();
}
class ConcreteCreatorA extends Creator{
public Product create(){
return new ConcreteProductA() ;
}
}
class ConcreteCreatorB extends Creator{
public Product create(){
return new ConcreteProductB() ;
}
}
EXEMPLO
15. Patterns de Criação
• Singleton: Garantir que uma classe só tenha uma única instância, e
prover um ponto de acesso global a ela.
• Factory Method: Definir uma interface para criar um objeto mas
deixar que subclasses decidam que classe instanciar.
• Abstract Factory : Prover interface para criar famílias de objetos
relacionados ou dependentes sem especificar suas classes concretas
• Builder : Separar a construção de objeto complexo da
representação para criar representações diferentes com mesmo
processo.
• Prototype : Especificar tipos a criar usando uma instância como
protótipo e criar novos objetos ao copiar este protótipo.
16. Pattern Builder
"Separar a construção de um objeto complexo de
sua representação para que o mesmo processo
de construção possa criar representações
diferentes.”
Problema
• O cliente precisa criar um objeto, porém, o
processo de criação é complexo e pode variar.
17. Pattern Builder
Solução
• Separar a construção de sua representação assim como
a construção possa criar diferentes representações.
• Exemplo:
Cliente
20. Pattern Builder
Quando Usar ?
• Use quando o algoritmo para criar um objeto complexo
precisar ser independente das partes que compõem o objeto
e da forma como o objeto é construído.
• Use quando o processo de construção precisar suportar
representações diferentes do objeto que está sendo
construído
21. Patterns de Criação
• Singleton: Garantir que uma classe só tenha uma única instância, e
prover um ponto de acesso global a ela.
• Factory Method: Definir uma interface para criar um objeto mas
deixar que subclasses decidam que classe instanciar.
• Abstract Factory : Prover interface para criar famílias de objetos
relacionados ou dependentes sem especificar suas classes concretas
• Builder : Separar a construção de objeto complexo da
representação para criar representações diferentes com mesmo
processo.
• Prototype : Especificar tipos a criar usando uma instância como
protótipo e criar novos objetos ao copiar este protótipo.
22. Pattern PrototypePattern Prototype
"Especificar os tipos de objetos a serem criados usando uma
instância como protótipo e criar novos objetos ao copiar este
protótipo.” [ GoF ]
• O padrão Prototype permite que um cliente crie novos
objetos ao copiar objetos existentes.
• Uma vantagem de criar objetos deste modo é poder
aproveitar o estado existente de um objeto.
25. Prototype
• O Pattern Prototype é implementado da Interface Cloneable.
Circulo c = new Circulo(4, 5, 6);
Circulo copia = (Circulo) c.clone();
• Se o objeto apenas contiver tipos primitivos em seus campos de dados, é preciso
• declarar que a classe implementa Cloneable
• sobrepor clone() da seguinte forma:
public Object clone() {
try {
return super.clone();
} catch (CloneNotSupportedException e) {
return null;
}
}
26. Prototype – Exemplo
• Se o objeto contiver campos de dados que são
referências a objetos, é preciso fazer cópias
desses objetos também.
1. public class Circulo implements Cloneable {
2. private Ponto origem;
3. private double raio;
4. public Object clone() {
5. try {
6. Circulo c = (Circulo)super.clone();
7. c.origem = origem.clone(); //Ponto deve ser
clonável!
8. return c;
9. } catch(CloneNotSupportedException e) {
10. return null;
11. }
12. }
13.}
27. Patterns Estruturais
• Adapter: Converter a interface de uma classe em outra interface esperada pelos
clientes.
• Façade: Oferecer uma interface única de nível mais elevado para um conjunto de
interfaces de um subsistema.
• Composite: Permitir o tratamento de objetos individuais e composições desses
objetos de maneira uniforme.
• Bridge: Desacoplar uma abstração de sua implementação para que os dois possam
variar independentemente.
• Proxy: Prover um substituto ou ponto através do qual um objeto possa controlar o
acesso a outro.
• Flyweight: Usar compartilhamento para suportar eficientemente grandes
quantidades de objetos complexos.
• Decorator: Anexar responsabilidades adicionais a um objeto dinamicamente
28. Pattern Adapter
• Intenção: Casar um objeto existente, fora de seu
controle, com uma interface particular.
• Problema: Um Sistema possui dados e comportamento
correto mas interface inadequada. Ele é tipicamente
usado quando você tem que fazer algo derivar de sua
classe abstrata que estamos definindo ou que já esta
definida.
• Solução: O Adapter fornece um empacotador com a
interface desejada.
• Participantes: A classe Adapter ajusta a interface de uma
classe Adaptada para casar com a classe Alvo derivada
de Adapter. Isso possibilita ao cliente usar a classe
Adaptada como se fosse um tipo de Alvo.
29. Pattern Adapter
• Converter a interface de uma classe em outra interface esperada pelos clientes. Adapter
permite a comunicação entre classes que não poderiam trabalhar juntas devido à
incompatibilidade de suas interfaces.“ [ GoF ]
30. Pattern Adapter
• O Pattern Adapter é dividido em:
• Object Adapter: pattern demonstrado anteriormente , uma vez
que se baseia em um objeto (objeto adaptador) contendo um
outro (objeto adaptado).
• Class Adapter: Uma maneira de implementar o padrão através
de herança múltipla.
31. Pattern Adapter – Class
Adapterpublic interface ITarget {
public void operation();
}
public class Adaptee {
public Adaptee() {
}
public void adaptedOperation () {
//executa alguma operação
}
}
public class Adapter extends Adaptee
implements
ITarget {
public Adapter() {
super();
}
public void operation() {
super.adaptedOperation();
}
}
public class Client {
private ITarget iTarget;
public Client() {
// Poderia ser uma fabrica.
iTarget = new Adapter();
}
// getter e setters..
public static void main (String[]
args) {
Client client = new
Client ();
client.getITarget().operation();
}
}
32. Pattern Adapter
• Quando Usar ?
• Sempre que for necessário adaptar uma interface para
um cliente
• Class Adapter
• Quando houver uma interface que permita a
implementação estática
• Object Adapter
• Quando menor acoplamento for desejado
• Quando o cliente não usa uma interface Java ou classe
abstrata que possa ser estendida
33. Patterns Estruturais• Adapter: Converter a interface de uma classe em outra interface esperada pelos clientes.
• Façade: Oferecer uma interface única de nível mais elevado para um conjunto de interfaces de um
subsistema.
• Composite: Permitir o tratamento de objetos individuais e composições desses objetos de maneira
uniforme.
• Bridge: Desacoplar uma abstração de sua implementação para que os dois possam variar
independentemente.
• Proxy: Prover um substituto ou ponto através do qual um objeto possa controlar o acesso a outro.
• Flyweight: Usar compartilhamento para suportar eficientemente grandes quantidades de objetos
complexos.
• Decorator: Anexar responsabilidades adicionais a um objeto dinamicamente
34. Pattern Façade
"Oferecer uma interface única para um conjunto
de interfaces de um subsistema. Façade define
uma interface de nível mais elevado que torna o
subsistema mais fácil de usar.”
[
GoF ]
35. Pattern Façade
• Intenção: Você deseja simplificar o uso de um sistema
existente. Precisa definir sua própria interface.
• Problema: Você deseja utilizar somente um subconjunto
de um sistema complexo. Ou interagir com o sistema de
uma maneira particular
• Solução: O Façade Apresenta uma nova interface para o
cliente usar o sistema existente
• Participantes: Ele apresenta uma interface especifica
para o cliente o que torna o sistema mais fácil de ser
utilizado.
39. Pattern Façade
• Façades podem oferecer maior ou menor isolamento entre aplicação cliente e
objetos.
• Nível ideal deve ser determinado pelo nível de acoplamento desejado entre os
sistemas.
• A Façades mostrada como exemplo isola totalmente o cliente dos objetos
• Quando usar?
• Sempre que for desejável criar uma interface para um conjunto de objetos com
o objetivo de facilitar o uso da aplicação
• Permite que objetos individuais cuidem de uma única tarefa, deixando que a fachada
se encarregue de divulgar as suas operações.
40. Patterns Estruturais
• Adapter: Converter a interface de uma classe em outra interface esperada pelos
clientes.
• Façade: Oferecer uma interface única de nível mais elevado para um conjunto de
interfaces de um subsistema.
• Composite: Permitir o tratamento de objetos individuais e composições desses
objetos de maneira uniforme.
• Bridge: Desacoplar uma abstração de sua implementação para que os dois possam
variar independentemente.
• Proxy: Prover um substituto ou ponto através do qual um objeto possa controlar o
acesso a outro.
• Flyweight: Usar compartilhamento para suportar eficientemente grandes
quantidades de objetos complexos.
• Decorator: Anexar responsabilidades adicionais a um objeto dinamicamente
41. Pattern Composite
"Compor objetos em estruturas de árvore para representar
hierarquias todo-parte. Composite permite que clientes
tratem objetos individuais e composições de objetos de
maneira uniforme.” [ GoF ]
42. Pattern Composite
São comuns as situações onde temos que lidar com uma estrutura de
elementos agrupada hierarquicamente (não como meras coleções).
• Composições podem cumprir com este requisito e ainda
permitir:
• o tratamento da composição como um todo;
• ignorar as diferenças entre composições e elementos individuais;
• adição transparente de novos tipos a hierarquia;
• simplificação do cliente.
43. Pattern Composite - Problema
• Cliente precisa tratar de
maneira uniforme objetos
individuais e composições
de objetos
44. Pattern Composite – Diagrama de Classe
• Tratar grupos e
indivíduos diferentes
através de uma única
interface
45. Pattern Composite
Componente.java
public abstract class Componente {
private String pn;
public String getPn() {
return pn;
}
public void setPn(String pn) {
this.pn = pn;
}
public Componente(String pn) {
setPn(pn);
}
public abstract void operacao();
public abstract void add(Componente
comp);
public abstract Componente remove(int
index);
public abstract Componente
getFilho(int index);
public abstract int
getComponenteCount();
}
Composite.java
public class Composite extends Componente {
private ArrayList<Componente> componenteList;
public Composite(String pn) {
super(pn);
componenteList = new ArrayList<Componente>();
}
public void operacao() {
System.out.println("PN "+ getPn() +
" composto por: ");
for(int i = 0; i < getComponenteCount(); i++) {
getFilho(i).operacao();
}
}
public void add(Componente comp) {
componenteList.add(comp);
}
public Componente remove(int index) {
return componenteList.remove(index);
}
public Componente getFilho(int index){
return componenteList.get(index);
}
public int getComponenteCount() {
return componenteList.size();
}
}
46. Pattern Composite
Folha.java
public class Folha extends
Componente {
public Folha(String pn) {
super(pn);
}
public void operacao() {
System.out.println(getPn());
}
public void add(Componente comp){
}
public Componente remove(int
index){
return null;
}
public Componente getFilho(int
index){
return null;
}
public int getComponenteCount() {
return -1;
}
}
Cliente.java
public class Cliente {
public static void main(String[]
args) {
Folha a1 = new Folha("A1");
Folha a2 = new Folha("A2");
Folha a3 = new Folha("A3");
Composite c1 = new
Composite("C1");
c1.add(a1);
c1.add(a2);
Composite c2 = new
Composite("C2");
c2.add(a3);
Composite c3 = new
Composite("C3");
c3.add(c1);
c3.add(c2);
c3.operacao();
}
}
47. Pattern Composite – Quando Usar ?
• Sempre que houver necessidade de tratar um
conjunto como um indivíduo
• Há várias estratégias de implementação
48. Patterns Estruturais
• Adapter: Converter a interface de uma classe em outra interface esperada pelos
clientes.
• Façade: Oferecer uma interface única de nível mais elevado para um conjunto de
interfaces de um subsistema.
• Composite: Permitir o tratamento de objetos individuais e composições desses
objetos de maneira uniforme.
• Bridge: Desacoplar uma abstração de sua implementação para que os dois possam
variar independentemente.
• Proxy: Prover um substituto ou ponto através do qual um objeto possa controlar o
acesso a outro.
• Flyweight: Usar compartilhamento para suportar eficientemente grandes
quantidades de objetos complexos.
• Decorator: Anexar responsabilidades adicionais a um objeto dinamicamente
49. Pattern Proxy – Problema
• Sistema quer utilizar um determinado objeto...
• Mas ele não está disponível (remoto, inaccessível, etc)
• Solução: arranjar um intermediário que saiba se comunicar com ele
eficientemente
51. Pattern Proxy - Estrutura
• Cliente usa intermediário em vez de sujeito real
• Intermediário suporta a mesma interface que
sujeito real
• Intermediário contém uma referência para o
sujeito real e repassa chamadas, possivelmente,
acrescentando informações ou filtrando dados
no processo.
52. Pattern Proxy
public class Creso {
...
Sujeito deusApolo = Fabrica.getSujeito();
deusApolo.operacao();
...
}
public class DeusApolo implements Sujeito {
public Object operacao() {
return coisaUtil;
}
}
public class Oraculo implements Sujeito {
private DeusApolo real;
public Object operacao() {
cobraTaxa();
return real.operacao();
}
}
public interface Sujeito {
public Object operacao();
}
Inacessível ao Cliente
Cliente comunica-se com Objeto
através dessa classe
53. Pattern Proxy – Quando
Usar ?
• A aplicação mais comum é em objetos distribuídos
• Vantagens
• Transparência: mesma sintaxe usada na comunicação entre o
cliente e sujeito real é usada no proxy
• Permite o tratamento inteligente dos dados no cliente
• Desvantagens
• Possível impacto na performance
• Transparência nem sempre é 100% (fatores externos como
queda da rede podem tornar o proxy inoperante ou
desatualizado
54. Patterns Comportamentais
•Chain of responsibility: enviar uma requisição para vários objetos sem
especificar o destinatário explicitamente.
•Command: requisição como objeto, para clientes parametrizarem
diferentes requisições, filas, e suportar operações reversíveis.
•Mediator: Definir um objeto que encapsula a forma como um conjunto de
objetos interagem.
•Memento: Externalizar o estado interno de um objeto para que o objeto
possa ter esse estado restaurado posteriormente.
•State: Permitir a um objeto alterar o seu comportamento quanto o seu
estado interno mudar.
•Strategy: Definir uma família de algoritmos, encapsular cada um, e fazê-los
intercambiáveis.
55. Behavioral
Chain of responsibility (cadeia de responsabilidade)
Intenção:
• Uma maneira de passar um pedido entre uma cadeia de objetos
Observações:
• O objeto que trata a solicitação deve ser escolhido automaticamente;
• Deve-se emitir uma solicitação para um dentre vários objetos,
• O conjunto de objetos que pode tratar uma solicitação deveria ser
especificado dinamicamente.
57. Behavioral
Command (Comando)
Intenção:
•encapsular uma solicitação de comando como um objeto.
Observações:
•Parametrizar objetos por uma ação a ser executada.
•Especificar, enfileirar e executar solicitações em tempos diferentes.
•Especificar, enfileirar e executar solicitações em tempos diferentes.
59. Behavioral
Mediator (Mediador)
Intenção:
•Define comunicação simplificada entre classes;
Observações:
•Mediator pode alavancar Observer para registrar dinamicamente
colegas e se comunicar com eles.
•Ele permite a unificação da interface de um sistema
60. Behavioral
Memento
Intenção:
•Sem violar o encapsulamento, captura e externaliza o estado
interno de um objeto para que o objeto pode ser devolvido a este
estado mais tarde.
Observações:
•Memento é muitas vezes utilizado em conjunto com Iterator.
•Pode usar Memento para manter o estado necessário para uma
operação de desfazer.
62. Behavioral
State (Estado)
Intenção:
• Permite que um objeto altere seu comportamento quando seu estado
interno muda. O objeto aparecerá para mudar sua classe.
Observações:
• Facilita a expansão de estados.
• Facilita a localizar as responsabilidades de estados específicos,
• Os objetos Estado podem ser compartilhados se eles não contêm
variáveis de instância
64. Behavioral
Strategy (Estratégia)
Intenção;
•Encapsula um algoritmo dentro de uma classe
Observações:
•Strategy permite definir novas operações sem alterar as classes dos
elementos sobre os quais opera.
•Definir uma família de algoritmos e encapsular cada algoritmo como
uma classe.