SlideShare uma empresa Scribd logo
1 de 40
Baixar para ler offline
Melhorando seu código com Design Patterns
Alexandre Macedo
K19 Treinamentos
18 de outubro de 2010
Alexandre Macedo Melhorando seu código com Design Patterns www.k19.com.br
O que são Design Patterns?
Alexandre Macedo Melhorando seu código com Design Patterns www.k19.com.br
O que são Design Patterns?
I O termo ganhou popularidade depois do livro Design Patterns:
Elements of Reusable Object-Oriented Software publicado em 1994,
pelo conhecido GoF (Gang of Four);
Alexandre Macedo Melhorando seu código com Design Patterns www.k19.com.br
O que são Design Patterns?
I O termo ganhou popularidade depois do livro Design Patterns:
Elements of Reusable Object-Oriented Software publicado em 1994,
pelo conhecido GoF (Gang of Four);
I O livro apresenta uma série de problemas específicos para um
determinado contexto, e apresenta uma solução. Essa solução acaba
ganhando um nome, e vira um Design Pattern;
Alexandre Macedo Melhorando seu código com Design Patterns www.k19.com.br
O que são Design Patterns?
I O termo ganhou popularidade depois do livro Design Patterns:
Elements of Reusable Object-Oriented Software publicado em 1994,
pelo conhecido GoF (Gang of Four);
I O livro apresenta uma série de problemas específicos para um
determinado contexto, e apresenta uma solução. Essa solução acaba
ganhando um nome, e vira um Design Pattern;
I Ao todo, no livro são apresentados 23 patterns.
Alexandre Macedo Melhorando seu código com Design Patterns www.k19.com.br
Design Patterns
I Factory Method
I Abstract Factory
I Builder
I Prototype
I Singleton
I Adapter
I Bridge
I Composite
I Decorator
I Facade
I Flyweigth
I Proxy
I Chain of Responsability
I Command
I Interpreter
I Iterator
I Mediator
I Memento
I Observer
I State
I Strategy
I Template Method
I Visitor
Alexandre Macedo Melhorando seu código com Design Patterns www.k19.com.br
Design Patterns
I Factory Method
I Abstract Factory
I Builder
I Prototype
I Singleton
I Adapter
I Bridge
I Composite
I Decorator
I Facade
I Flyweigth
I Proxy
I Chain of Responsability
I Command
I Interpreter
I Iterator
I Mediator
I Memento
I Observer
I State
I Strategy
I Template Method
I Visitor
Alexandre Macedo Melhorando seu código com Design Patterns www.k19.com.br
Orientação a Objetos
Boas práticas:
Alexandre Macedo Melhorando seu código com Design Patterns www.k19.com.br
Orientação a Objetos
Boas práticas:
I identifique o que muda, e isole do código que permanece o mesmo;
Alexandre Macedo Melhorando seu código com Design Patterns www.k19.com.br
Orientação a Objetos
Boas práticas:
I identifique o que muda, e isole do código que permanece o mesmo;
I programe para uma interface, não uma implementação;
Alexandre Macedo Melhorando seu código com Design Patterns www.k19.com.br
Orientação a Objetos
Boas práticas:
I identifique o que muda, e isole do código que permanece o mesmo;
I programe para uma interface, não uma implementação;
I priorize composição sobre herança.
Alexandre Macedo Melhorando seu código com Design Patterns www.k19.com.br
Orientação a Objetos
Bons princípios:
Alexandre Macedo Melhorando seu código com Design Patterns www.k19.com.br
Orientação a Objetos
Bons princípios:
I DRY — Don’t repeat yourself!
Alexandre Macedo Melhorando seu código com Design Patterns www.k19.com.br
Orientação a Objetos
Bons princípios:
I DRY — Don’t repeat yourself!
I KISS — Keep it simple, stupid!
Alexandre Macedo Melhorando seu código com Design Patterns www.k19.com.br
Orientação a Objetos
Bons princípios:
I DRY — Don’t repeat yourself!
I KISS — Keep it simple, stupid!
I YAGNI — You ain’t gonna need it!
Alexandre Macedo Melhorando seu código com Design Patterns www.k19.com.br
Factory Method
Características
I define uma maneira padrão de criar objetos;
Alexandre Macedo Melhorando seu código com Design Patterns www.k19.com.br
Factory Method
Características
I define uma maneira padrão de criar objetos;
I bom para encapsular informações necessárias no momento da
instanciação do objeto.
Alexandre Macedo Melhorando seu código com Design Patterns www.k19.com.br
Factory Method
Antes (sem a fábrica)
public static void main(String[] args) {
String stringDeConexao = "jdbc:mysql://localhost:3306/database";
String usuario = "user";
String senha = "password";
try {
System.out.println("Abrindo conexao...");
Connection conexao = DriverManager.getConnection(stringDeConexao
, usuario, senha);
String textoDoComando = "SELECT * FROM tabela;";
PreparedStatement comando = conexao.prepareStatement(
textoDoComando);
System.out.println("Executando comando...");
ResultSet resultado = comando.executeQuery();
// continua o resto da classe
Alexandre Macedo Melhorando seu código com Design Patterns www.k19.com.br
Factory Method
Exemplo de Fábrica
public class FabricaDeConexao {
public static Connection CriaConexao() {
String stringDeConexao = "jdbc:mysql://localhost:3306/database";
String usuario = "user";
String senha = "password";
Connection conexao = null;
try {
conexao = DriverManager.getConnection(stringDeConexao, usuario,
senha);
} catch (SQLException e) {
e.printStackTrace();
}
return conexao;
}
}
Alexandre Macedo Melhorando seu código com Design Patterns www.k19.com.br
Factory Method
Depois (já utilizando a fábrica)
public static void main(String[] args) {
try {
System.out.println("Abrindo conexao...");
Connection conexao = FabricaDeConexao.CriaConexao();
String textoDoComando = "SELECT * FROM tabela;";
PreparedStatement comando = conexao.prepareStatement(
textoDoComando);
System.out.println("Executando comando...");
ResultSet resultado = comando.executeQuery();
// continua o resto da classe
Alexandre Macedo Melhorando seu código com Design Patterns www.k19.com.br
Factory Method
Mais avançado
Quando há mais de um tipo de classe a ser criado, o padrão Factory Method
é usualmente usado para definir uma interface para criar um objeto,
deixando para subclasses decidirem qual objeto deve ser instanciado.
Alexandre Macedo Melhorando seu código com Design Patterns www.k19.com.br
Factory Method
Mais avançado
Quando há mais de um tipo de classe a ser criado, o padrão Factory Method
é usualmente usado para definir uma interface para criar um objeto,
deixando para subclasses decidirem qual objeto deve ser instanciado.
Alexandre Macedo Melhorando seu código com Design Patterns www.k19.com.br
Adapter
Características
I o objetivo do padrão Adapter é converter a interface de uma classe
para uma outra interface que o sistema espera;
Alexandre Macedo Melhorando seu código com Design Patterns www.k19.com.br
Adapter
Características
I o objetivo do padrão Adapter é converter a interface de uma classe
para uma outra interface que o sistema espera;
I é utilizado quando mudanças diretas feitas na interface das classes não
podem (ou não devem) ser feitas, então o Adapter é necessário para
que as duas classes possam interagir entre si;
Alexandre Macedo Melhorando seu código com Design Patterns www.k19.com.br
Adapter
Características
I o objetivo do padrão Adapter é converter a interface de uma classe
para uma outra interface que o sistema espera;
I é utilizado quando mudanças diretas feitas na interface das classes não
podem (ou não devem) ser feitas, então o Adapter é necessário para
que as duas classes possam interagir entre si;
I também conhecido como Wrapper.
Alexandre Macedo Melhorando seu código com Design Patterns www.k19.com.br
Adapter
Diagrama
Alexandre Macedo Melhorando seu código com Design Patterns www.k19.com.br
Adapter
Exemplo
I se você já encontrou algum código antigo de Java é bem possível que
tenha encontrado a interface Enumeration;
I hoje em dia, até de acordo com a API da Orcle, é indicado utilizar a
interface Iterator;
I digamos que você tenha que utilizar uma API legada de um sistema
mais antigo, que utiliza Enumeration e precisa integrar com um sistema
mais recente que apenas utiliza Iterator;
Alexandre Macedo Melhorando seu código com Design Patterns www.k19.com.br
Adapter
Exemplo
I se você já encontrou algum código antigo de Java é bem possível que
tenha encontrado a interface Enumeration;
I hoje em dia, até de acordo com a API da Orcle, é indicado utilizar a
interface Iterator;
I digamos que você tenha que utilizar uma API legada de um sistema
mais antigo, que utiliza Enumeration e precisa integrar com um sistema
mais recente que apenas utiliza Iterator;
I isso parece um trabalho para o Adapter.
Alexandre Macedo Melhorando seu código com Design Patterns www.k19.com.br
Adapter
Exemplo
Alexandre Macedo Melhorando seu código com Design Patterns www.k19.com.br
Adapter
Exemplo
public class EnumerationIterator implements Iterator {
private Enumeration colecao;
public EnumerationIterator(Enumeration colecao) {
this.colecao = colecao;
}
public boolean hasNext() {
return this.colecao.hasMoreElements();
}
public Object next() {
return this.colecao.nextElement();
}
public void remove() {
throw new UnsupportedOperationException();
}
}
Alexandre Macedo Melhorando seu código com Design Patterns www.k19.com.br
Observer
Características
I define uma relação de um-para-muitos entre objetos, de forma que,
quando um objeto tem seu estado alterado, todos os seus dependentes
são notificados e atualizados automaticamente;
Alexandre Macedo Melhorando seu código com Design Patterns www.k19.com.br
Observer
Características
I define uma relação de um-para-muitos entre objetos, de forma que,
quando um objeto tem seu estado alterado, todos os seus dependentes
são notificados e atualizados automaticamente;
I também conhecido como Publish/Subscribe;
Alexandre Macedo Melhorando seu código com Design Patterns www.k19.com.br
Observer
Características
I define uma relação de um-para-muitos entre objetos, de forma que,
quando um objeto tem seu estado alterado, todos os seus dependentes
são notificados e atualizados automaticamente;
I também conhecido como Publish/Subscribe;
I muito utilizado em interfaces para Desktop;
Alexandre Macedo Melhorando seu código com Design Patterns www.k19.com.br
Observer
Características
I define uma relação de um-para-muitos entre objetos, de forma que,
quando um objeto tem seu estado alterado, todos os seus dependentes
são notificados e atualizados automaticamente;
I também conhecido como Publish/Subscribe;
I muito utilizado em interfaces para Desktop;
Alexandre Macedo Melhorando seu código com Design Patterns www.k19.com.br
Observer
Exemplo
public interface Observable {
void register(Observer observer);
void unregister(Observer observer);
void notifyObservers();
}
public interface Observer {
void update(int i);
}
Alexandre Macedo Melhorando seu código com Design Patterns www.k19.com.br
Observer
Exemplo
public class Aquecedor implements Observer {
private Observable sensor;
private boolean ligado;
public Aquecedor(Observable sensor) {
this.sensor = sensor;
this.sensor.register(this);
this.ligado = false;
}
public void update(int i) {
if (i <= 16 && !ligado) {
System.out.println("Temperatura: " + i
+ " -> Ligando o aquecedor...");
this.ligado = true;
} else if (i > 16 && ligado) {
System.out.println("Temperatura: " + i
+ " -> Desligando o aquecedor...");
this.ligado = false;
}
}
}
Alexandre Macedo Melhorando seu código com Design Patterns www.k19.com.br
Observer
Exemplo
public class ArCondicionado implements Observer {
private boolean ligado;
private Observable sensor;
public ArCondicionado(Observable sensor) {
this.sensor = sensor;
this.sensor.register(this);
this.ligado = false;
}
public void update(int i) {
if (i > 24 && !ligado) {
System.out.println("Temperatura: " + i
+ " -> Ligando o ar condicionado...");
this.ligado = true;
} else if (i <= 16 && ligado) {
System.out.println("Temperatura: " + i
+ " -> Desligando o ar condicionado...");
this.ligado = false;
}
}
}
Alexandre Macedo Melhorando seu código com Design Patterns www.k19.com.br
Observer
Exemplo
public class SensorDeTemperatura implements Observable {
private int temperatura;
List<Observer> observers = new ArrayList<Observer>();;
public void setTemperatura(int temperatura) {
if (this.temperatura != temperatura) {
this.temperatura = temperatura;
notifyObservers();
}
}
public void register(Observer observer) {
this.observers.add(observer);
}
public void unregister(Observer observer) {
this.observers.remove(observer);
}
public void notifyObservers() {
for (Observer o : this.observers) {
o.update(this.temperatura);
}
}
}
Alexandre Macedo Melhorando seu código com Design Patterns www.k19.com.br
Observer
Exemplo
public class Principal {
public static void main(String[] args) {
SensorDeTemperatura sensor = new SensorDeTemperatura();
Observer ar = new ArCondicionado(sensor);
Observer aquecedor = new Aquecedor(sensor);
sensor.setTemperatura(22);
sensor.setTemperatura(29);
sensor.setTemperatura(15);
sensor.setTemperatura(22);
}
}
Temperatura: 29 -> Ligando o ar condicionado...
Temperatura: 15 -> Desligando o ar condicionado...
Temperatura: 15 -> Ligando o aquecedor...
Temperatura: 22 -> Desligando o aquecedor...
Alexandre Macedo Melhorando seu código com Design Patterns www.k19.com.br
Obrigado!
Dúvidas ou sugestões: contato@k19.com.br
Para acompanhar as novidades confira o site: www.k19.com.br
Ou siga-nos no Twitter: @k19treinamentos

Mais conteúdo relacionado

Mais procurados

Aula 4 - Diagrama Entidade Relacionamento (com exercício no final)
Aula 4  - Diagrama Entidade Relacionamento (com exercício no final)Aula 4  - Diagrama Entidade Relacionamento (com exercício no final)
Aula 4 - Diagrama Entidade Relacionamento (com exercício no final)Janynne Gomes
 
Estrutura de Dados - Aula de revisão de C na prática
Estrutura de Dados - Aula de revisão de C na práticaEstrutura de Dados - Aula de revisão de C na prática
Estrutura de Dados - Aula de revisão de C na práticaLeinylson Fontinele
 
Segurança da informação
Segurança da informaçãoSegurança da informação
Segurança da informaçãoimsp2000
 
Introdução à Lógica de Programação
Introdução à Lógica de ProgramaçãoIntrodução à Lógica de Programação
Introdução à Lógica de ProgramaçãoAndré Agostinho
 
tmn - Introdução ao JavaScript
tmn - Introdução ao JavaScripttmn - Introdução ao JavaScript
tmn - Introdução ao JavaScriptClaudio Gamboa
 
Saa s software como serviço (slides)
Saa s   software como serviço (slides)Saa s   software como serviço (slides)
Saa s software como serviço (slides)Daniela Nunes
 
Aula 1 introdução a algoritmos
Aula 1   introdução a algoritmosAula 1   introdução a algoritmos
Aula 1 introdução a algoritmosAdilio Tavares
 
Aula 1 - Introdução a Engenharia de Software
Aula 1 -  Introdução a Engenharia de SoftwareAula 1 -  Introdução a Engenharia de Software
Aula 1 - Introdução a Engenharia de SoftwareLeinylson Fontinele
 
Aula 5 - Modelo de Entidade e Relacionamento - MER
Aula 5 - Modelo de Entidade e Relacionamento - MER Aula 5 - Modelo de Entidade e Relacionamento - MER
Aula 5 - Modelo de Entidade e Relacionamento - MER Vitor Hugo Melo Araújo
 
Desenvolvimento de aplicações para dispositivos móveis módulo i - aula 2
Desenvolvimento de aplicações para dispositivos móveis   módulo i - aula 2Desenvolvimento de aplicações para dispositivos móveis   módulo i - aula 2
Desenvolvimento de aplicações para dispositivos móveis módulo i - aula 2Carlos Eugenio Torres
 
Desenvolvimento Mobile
Desenvolvimento MobileDesenvolvimento Mobile
Desenvolvimento MobileElton Minetto
 
Lógica de programação em ppt
Lógica de programação em pptLógica de programação em ppt
Lógica de programação em pptAndrei Bastos
 
Estrutura de Dados - Aula 01
Estrutura de Dados - Aula 01Estrutura de Dados - Aula 01
Estrutura de Dados - Aula 01thomasdacosta
 
Tipos de Licença de Softwares
Tipos de Licença de SoftwaresTipos de Licença de Softwares
Tipos de Licença de SoftwaresLucas Castejon
 
Aula1 - Apresentação de Banco de Dados
Aula1 - Apresentação de Banco de DadosAula1 - Apresentação de Banco de Dados
Aula1 - Apresentação de Banco de DadosRafael Albani
 
Governança de TI.pptx
Governança de TI.pptxGovernança de TI.pptx
Governança de TI.pptxssusera0a510
 

Mais procurados (20)

Aula 4 - Diagrama Entidade Relacionamento (com exercício no final)
Aula 4  - Diagrama Entidade Relacionamento (com exercício no final)Aula 4  - Diagrama Entidade Relacionamento (com exercício no final)
Aula 4 - Diagrama Entidade Relacionamento (com exercício no final)
 
Aula 3 - Política de Segurança da Informação (PSI)
Aula 3 - Política de Segurança da Informação (PSI)Aula 3 - Política de Segurança da Informação (PSI)
Aula 3 - Política de Segurança da Informação (PSI)
 
Estrutura de Dados - Aula de revisão de C na prática
Estrutura de Dados - Aula de revisão de C na práticaEstrutura de Dados - Aula de revisão de C na prática
Estrutura de Dados - Aula de revisão de C na prática
 
Segurança da informação
Segurança da informaçãoSegurança da informação
Segurança da informação
 
Introdução à Lógica de Programação
Introdução à Lógica de ProgramaçãoIntrodução à Lógica de Programação
Introdução à Lógica de Programação
 
tmn - Introdução ao JavaScript
tmn - Introdução ao JavaScripttmn - Introdução ao JavaScript
tmn - Introdução ao JavaScript
 
Saa s software como serviço (slides)
Saa s   software como serviço (slides)Saa s   software como serviço (slides)
Saa s software como serviço (slides)
 
Paradigmas de programação
Paradigmas de programaçãoParadigmas de programação
Paradigmas de programação
 
Aula 1 introdução a algoritmos
Aula 1   introdução a algoritmosAula 1   introdução a algoritmos
Aula 1 introdução a algoritmos
 
Aula 1 - Introdução a Engenharia de Software
Aula 1 -  Introdução a Engenharia de SoftwareAula 1 -  Introdução a Engenharia de Software
Aula 1 - Introdução a Engenharia de Software
 
Aula 5 - Modelo de Entidade e Relacionamento - MER
Aula 5 - Modelo de Entidade e Relacionamento - MER Aula 5 - Modelo de Entidade e Relacionamento - MER
Aula 5 - Modelo de Entidade e Relacionamento - MER
 
Introdução a Bancos de Dados
Introdução a Bancos de DadosIntrodução a Bancos de Dados
Introdução a Bancos de Dados
 
Arquitetura de Software EXPLICADA
Arquitetura de Software EXPLICADAArquitetura de Software EXPLICADA
Arquitetura de Software EXPLICADA
 
Desenvolvimento de aplicações para dispositivos móveis módulo i - aula 2
Desenvolvimento de aplicações para dispositivos móveis   módulo i - aula 2Desenvolvimento de aplicações para dispositivos móveis   módulo i - aula 2
Desenvolvimento de aplicações para dispositivos móveis módulo i - aula 2
 
Desenvolvimento Mobile
Desenvolvimento MobileDesenvolvimento Mobile
Desenvolvimento Mobile
 
Lógica de programação em ppt
Lógica de programação em pptLógica de programação em ppt
Lógica de programação em ppt
 
Estrutura de Dados - Aula 01
Estrutura de Dados - Aula 01Estrutura de Dados - Aula 01
Estrutura de Dados - Aula 01
 
Tipos de Licença de Softwares
Tipos de Licença de SoftwaresTipos de Licença de Softwares
Tipos de Licença de Softwares
 
Aula1 - Apresentação de Banco de Dados
Aula1 - Apresentação de Banco de DadosAula1 - Apresentação de Banco de Dados
Aula1 - Apresentação de Banco de Dados
 
Governança de TI.pptx
Governança de TI.pptxGovernança de TI.pptx
Governança de TI.pptx
 

Destaque

33 design patterns com Java
33 design patterns com Java33 design patterns com Java
33 design patterns com JavaGlobalcode
 
Academia do Arquiteto - Implantando A.L.M. em uma semana!
Academia do Arquiteto - Implantando A.L.M. em uma semana!Academia do Arquiteto - Implantando A.L.M. em uma semana!
Academia do Arquiteto - Implantando A.L.M. em uma semana!Globalcode
 
Java, Internet das Coisas, Things API e Arquiteturas de Inovação
Java, Internet das Coisas, Things API e Arquiteturas de InovaçãoJava, Internet das Coisas, Things API e Arquiteturas de Inovação
Java, Internet das Coisas, Things API e Arquiteturas de InovaçãoGlobalcode
 
Observer - Padrões de projeto
Observer - Padrões de projetoObserver - Padrões de projeto
Observer - Padrões de projetoEduardo Mendes
 
Use scratch para aprender a programar se divertindo
Use scratch para aprender a programar se divertindoUse scratch para aprender a programar se divertindo
Use scratch para aprender a programar se divertindoGlobalcode
 
Padroes De Projeto
Padroes De ProjetoPadroes De Projeto
Padroes De Projetoejdn1
 
Enterprise JavaBeans simples e descomplicado, na prática
Enterprise JavaBeans simples e descomplicado, na práticaEnterprise JavaBeans simples e descomplicado, na prática
Enterprise JavaBeans simples e descomplicado, na práticaGlobalcode
 
Palestra sobre Carreira Java / JavaEE - TDC2012 - Trlha Java
Palestra sobre Carreira Java / JavaEE - TDC2012 - Trlha JavaPalestra sobre Carreira Java / JavaEE - TDC2012 - Trlha Java
Palestra sobre Carreira Java / JavaEE - TDC2012 - Trlha JavaGlobalcode
 
Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérg...
Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérg...Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérg...
Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérg...Caelum
 
Design patterns ppt
Design patterns pptDesign patterns ppt
Design patterns pptAman Jain
 

Destaque (20)

33 design patterns com Java
33 design patterns com Java33 design patterns com Java
33 design patterns com Java
 
Design patterns de uma vez por todas
Design patterns de uma vez por todasDesign patterns de uma vez por todas
Design patterns de uma vez por todas
 
design patterns java
design patterns javadesign patterns java
design patterns java
 
Academia do Arquiteto - Implantando A.L.M. em uma semana!
Academia do Arquiteto - Implantando A.L.M. em uma semana!Academia do Arquiteto - Implantando A.L.M. em uma semana!
Academia do Arquiteto - Implantando A.L.M. em uma semana!
 
Java, Internet das Coisas, Things API e Arquiteturas de Inovação
Java, Internet das Coisas, Things API e Arquiteturas de InovaçãoJava, Internet das Coisas, Things API e Arquiteturas de Inovação
Java, Internet das Coisas, Things API e Arquiteturas de Inovação
 
Observer - Padrões de projeto
Observer - Padrões de projetoObserver - Padrões de projeto
Observer - Padrões de projeto
 
Use scratch para aprender a programar se divertindo
Use scratch para aprender a programar se divertindoUse scratch para aprender a programar se divertindo
Use scratch para aprender a programar se divertindo
 
Padroes De Projeto
Padroes De ProjetoPadroes De Projeto
Padroes De Projeto
 
Padrões de Projeto - Design Patterns
Padrões de Projeto - Design PatternsPadrões de Projeto - Design Patterns
Padrões de Projeto - Design Patterns
 
Design Patterns - Com Java
Design Patterns  - Com JavaDesign Patterns  - Com Java
Design Patterns - Com Java
 
Design Patterns
Design PatternsDesign Patterns
Design Patterns
 
Enterprise JavaBeans simples e descomplicado, na prática
Enterprise JavaBeans simples e descomplicado, na práticaEnterprise JavaBeans simples e descomplicado, na prática
Enterprise JavaBeans simples e descomplicado, na prática
 
Padrão Iterator
Padrão IteratorPadrão Iterator
Padrão Iterator
 
Palestra sobre Carreira Java / JavaEE - TDC2012 - Trlha Java
Palestra sobre Carreira Java / JavaEE - TDC2012 - Trlha JavaPalestra sobre Carreira Java / JavaEE - TDC2012 - Trlha Java
Palestra sobre Carreira Java / JavaEE - TDC2012 - Trlha Java
 
JavaFX Primeiros Passos
JavaFX Primeiros PassosJavaFX Primeiros Passos
JavaFX Primeiros Passos
 
Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérg...
Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérg...Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérg...
Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérg...
 
Design patterns ppt
Design patterns pptDesign patterns ppt
Design patterns ppt
 
Palestra ASP.NET MVC
Palestra ASP.NET MVCPalestra ASP.NET MVC
Palestra ASP.NET MVC
 
Prototype
PrototypePrototype
Prototype
 
Simple Factory
Simple FactorySimple Factory
Simple Factory
 

Semelhante a Exemplos de Design Patterns em Java

Intro padroesprojetoadaptertemplateobserver
Intro padroesprojetoadaptertemplateobserverIntro padroesprojetoadaptertemplateobserver
Intro padroesprojetoadaptertemplateobserverEduardo Jorge
 
Refactory Worshop
Refactory WorshopRefactory Worshop
Refactory Worshopguestd37c23
 
Domain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BHDomain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BHGiovanni Bassi
 
Aula 1 - Introdução a POO
Aula 1 -  Introdução a POOAula 1 -  Introdução a POO
Aula 1 - Introdução a POODaniel Brandão
 
Padrões de projeto - Adapter, Proxy, Composite e Bridge
Padrões de projeto - Adapter, Proxy, Composite e BridgePadrões de projeto - Adapter, Proxy, Composite e Bridge
Padrões de projeto - Adapter, Proxy, Composite e BridgeLorran Pegoretti
 
Sobre code smells, refactoring e design: como SOLID pode te ajudar no dia a dia
Sobre code smells, refactoring e design: como SOLID pode te ajudar no dia a diaSobre code smells, refactoring e design: como SOLID pode te ajudar no dia a dia
Sobre code smells, refactoring e design: como SOLID pode te ajudar no dia a diaElaine Naomi
 
Workshop Django Framework - 30/10/2018
Workshop Django Framework - 30/10/2018Workshop Django Framework - 30/10/2018
Workshop Django Framework - 30/10/2018Rafael Sales Pavarina
 
Pattners Everywhere, Even in Javascript
Pattners Everywhere, Even in JavascriptPattners Everywhere, Even in Javascript
Pattners Everywhere, Even in JavascriptGustavo Corrêa Alves
 
POO2-Pre-32-PadroesProjetos_.pdf
POO2-Pre-32-PadroesProjetos_.pdfPOO2-Pre-32-PadroesProjetos_.pdf
POO2-Pre-32-PadroesProjetos_.pdfAndreCosta502039
 
Clean Code: Por um mundo com códigos melhores - SETI 2017
Clean Code: Por um mundo com códigos melhores - SETI 2017Clean Code: Por um mundo com códigos melhores - SETI 2017
Clean Code: Por um mundo com códigos melhores - SETI 2017Thiago Barradas
 
Clean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everisClean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everisRogerio Fontes
 
Boas praticas em_desenvolvimento_de_software
Boas praticas em_desenvolvimento_de_softwareBoas praticas em_desenvolvimento_de_software
Boas praticas em_desenvolvimento_de_softwareivanassisleal
 
Introdução ao framework CodeIgniter
Introdução ao framework CodeIgniterIntrodução ao framework CodeIgniter
Introdução ao framework CodeIgniterAnderson Gonçalves
 
Padrões De Projeto e Anti Patterns
Padrões De Projeto e Anti PatternsPadrões De Projeto e Anti Patterns
Padrões De Projeto e Anti PatternsHerval Freire
 

Semelhante a Exemplos de Design Patterns em Java (20)

Intro padroesprojetoadaptertemplateobserver
Intro padroesprojetoadaptertemplateobserverIntro padroesprojetoadaptertemplateobserver
Intro padroesprojetoadaptertemplateobserver
 
Refactory Worshop
Refactory WorshopRefactory Worshop
Refactory Worshop
 
Domain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BHDomain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BH
 
Aula 1 - Introdução a POO
Aula 1 -  Introdução a POOAula 1 -  Introdução a POO
Aula 1 - Introdução a POO
 
Introdução Play framework
Introdução Play frameworkIntrodução Play framework
Introdução Play framework
 
Refactoring - Design no Código
Refactoring - Design no CódigoRefactoring - Design no Código
Refactoring - Design no Código
 
Padrões de projeto - Adapter, Proxy, Composite e Bridge
Padrões de projeto - Adapter, Proxy, Composite e BridgePadrões de projeto - Adapter, Proxy, Composite e Bridge
Padrões de projeto - Adapter, Proxy, Composite e Bridge
 
Sobre code smells, refactoring e design: como SOLID pode te ajudar no dia a dia
Sobre code smells, refactoring e design: como SOLID pode te ajudar no dia a diaSobre code smells, refactoring e design: como SOLID pode te ajudar no dia a dia
Sobre code smells, refactoring e design: como SOLID pode te ajudar no dia a dia
 
Workshop Django Framework - 30/10/2018
Workshop Django Framework - 30/10/2018Workshop Django Framework - 30/10/2018
Workshop Django Framework - 30/10/2018
 
Pattners Everywhere, Even in Javascript
Pattners Everywhere, Even in JavascriptPattners Everywhere, Even in Javascript
Pattners Everywhere, Even in Javascript
 
POO2-Pre-32-PadroesProjetos_.pdf
POO2-Pre-32-PadroesProjetos_.pdfPOO2-Pre-32-PadroesProjetos_.pdf
POO2-Pre-32-PadroesProjetos_.pdf
 
Código limpo
Código limpoCódigo limpo
Código limpo
 
Clean Code: Por um mundo com códigos melhores - SETI 2017
Clean Code: Por um mundo com códigos melhores - SETI 2017Clean Code: Por um mundo com códigos melhores - SETI 2017
Clean Code: Por um mundo com códigos melhores - SETI 2017
 
Ruby & Rails
Ruby & RailsRuby & Rails
Ruby & Rails
 
Clean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everisClean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everis
 
Boas praticas em_desenvolvimento_de_software
Boas praticas em_desenvolvimento_de_softwareBoas praticas em_desenvolvimento_de_software
Boas praticas em_desenvolvimento_de_software
 
Introdução ao framework CodeIgniter
Introdução ao framework CodeIgniterIntrodução ao framework CodeIgniter
Introdução ao framework CodeIgniter
 
Aula1
Aula1Aula1
Aula1
 
Padrões De Projeto e Anti Patterns
Padrões De Projeto e Anti PatternsPadrões De Projeto e Anti Patterns
Padrões De Projeto e Anti Patterns
 
Padrões de projeto
Padrões de projetoPadrões de projeto
Padrões de projeto
 

Exemplos de Design Patterns em Java

  • 1. Melhorando seu código com Design Patterns Alexandre Macedo K19 Treinamentos 18 de outubro de 2010 Alexandre Macedo Melhorando seu código com Design Patterns www.k19.com.br
  • 2. O que são Design Patterns? Alexandre Macedo Melhorando seu código com Design Patterns www.k19.com.br
  • 3. O que são Design Patterns? I O termo ganhou popularidade depois do livro Design Patterns: Elements of Reusable Object-Oriented Software publicado em 1994, pelo conhecido GoF (Gang of Four); Alexandre Macedo Melhorando seu código com Design Patterns www.k19.com.br
  • 4. O que são Design Patterns? I O termo ganhou popularidade depois do livro Design Patterns: Elements of Reusable Object-Oriented Software publicado em 1994, pelo conhecido GoF (Gang of Four); I O livro apresenta uma série de problemas específicos para um determinado contexto, e apresenta uma solução. Essa solução acaba ganhando um nome, e vira um Design Pattern; Alexandre Macedo Melhorando seu código com Design Patterns www.k19.com.br
  • 5. O que são Design Patterns? I O termo ganhou popularidade depois do livro Design Patterns: Elements of Reusable Object-Oriented Software publicado em 1994, pelo conhecido GoF (Gang of Four); I O livro apresenta uma série de problemas específicos para um determinado contexto, e apresenta uma solução. Essa solução acaba ganhando um nome, e vira um Design Pattern; I Ao todo, no livro são apresentados 23 patterns. Alexandre Macedo Melhorando seu código com Design Patterns www.k19.com.br
  • 6. Design Patterns I Factory Method I Abstract Factory I Builder I Prototype I Singleton I Adapter I Bridge I Composite I Decorator I Facade I Flyweigth I Proxy I Chain of Responsability I Command I Interpreter I Iterator I Mediator I Memento I Observer I State I Strategy I Template Method I Visitor Alexandre Macedo Melhorando seu código com Design Patterns www.k19.com.br
  • 7. Design Patterns I Factory Method I Abstract Factory I Builder I Prototype I Singleton I Adapter I Bridge I Composite I Decorator I Facade I Flyweigth I Proxy I Chain of Responsability I Command I Interpreter I Iterator I Mediator I Memento I Observer I State I Strategy I Template Method I Visitor Alexandre Macedo Melhorando seu código com Design Patterns www.k19.com.br
  • 8. Orientação a Objetos Boas práticas: Alexandre Macedo Melhorando seu código com Design Patterns www.k19.com.br
  • 9. Orientação a Objetos Boas práticas: I identifique o que muda, e isole do código que permanece o mesmo; Alexandre Macedo Melhorando seu código com Design Patterns www.k19.com.br
  • 10. Orientação a Objetos Boas práticas: I identifique o que muda, e isole do código que permanece o mesmo; I programe para uma interface, não uma implementação; Alexandre Macedo Melhorando seu código com Design Patterns www.k19.com.br
  • 11. Orientação a Objetos Boas práticas: I identifique o que muda, e isole do código que permanece o mesmo; I programe para uma interface, não uma implementação; I priorize composição sobre herança. Alexandre Macedo Melhorando seu código com Design Patterns www.k19.com.br
  • 12. Orientação a Objetos Bons princípios: Alexandre Macedo Melhorando seu código com Design Patterns www.k19.com.br
  • 13. Orientação a Objetos Bons princípios: I DRY — Don’t repeat yourself! Alexandre Macedo Melhorando seu código com Design Patterns www.k19.com.br
  • 14. Orientação a Objetos Bons princípios: I DRY — Don’t repeat yourself! I KISS — Keep it simple, stupid! Alexandre Macedo Melhorando seu código com Design Patterns www.k19.com.br
  • 15. Orientação a Objetos Bons princípios: I DRY — Don’t repeat yourself! I KISS — Keep it simple, stupid! I YAGNI — You ain’t gonna need it! Alexandre Macedo Melhorando seu código com Design Patterns www.k19.com.br
  • 16. Factory Method Características I define uma maneira padrão de criar objetos; Alexandre Macedo Melhorando seu código com Design Patterns www.k19.com.br
  • 17. Factory Method Características I define uma maneira padrão de criar objetos; I bom para encapsular informações necessárias no momento da instanciação do objeto. Alexandre Macedo Melhorando seu código com Design Patterns www.k19.com.br
  • 18. Factory Method Antes (sem a fábrica) public static void main(String[] args) { String stringDeConexao = "jdbc:mysql://localhost:3306/database"; String usuario = "user"; String senha = "password"; try { System.out.println("Abrindo conexao..."); Connection conexao = DriverManager.getConnection(stringDeConexao , usuario, senha); String textoDoComando = "SELECT * FROM tabela;"; PreparedStatement comando = conexao.prepareStatement( textoDoComando); System.out.println("Executando comando..."); ResultSet resultado = comando.executeQuery(); // continua o resto da classe Alexandre Macedo Melhorando seu código com Design Patterns www.k19.com.br
  • 19. Factory Method Exemplo de Fábrica public class FabricaDeConexao { public static Connection CriaConexao() { String stringDeConexao = "jdbc:mysql://localhost:3306/database"; String usuario = "user"; String senha = "password"; Connection conexao = null; try { conexao = DriverManager.getConnection(stringDeConexao, usuario, senha); } catch (SQLException e) { e.printStackTrace(); } return conexao; } } Alexandre Macedo Melhorando seu código com Design Patterns www.k19.com.br
  • 20. Factory Method Depois (já utilizando a fábrica) public static void main(String[] args) { try { System.out.println("Abrindo conexao..."); Connection conexao = FabricaDeConexao.CriaConexao(); String textoDoComando = "SELECT * FROM tabela;"; PreparedStatement comando = conexao.prepareStatement( textoDoComando); System.out.println("Executando comando..."); ResultSet resultado = comando.executeQuery(); // continua o resto da classe Alexandre Macedo Melhorando seu código com Design Patterns www.k19.com.br
  • 21. Factory Method Mais avançado Quando há mais de um tipo de classe a ser criado, o padrão Factory Method é usualmente usado para definir uma interface para criar um objeto, deixando para subclasses decidirem qual objeto deve ser instanciado. Alexandre Macedo Melhorando seu código com Design Patterns www.k19.com.br
  • 22. Factory Method Mais avançado Quando há mais de um tipo de classe a ser criado, o padrão Factory Method é usualmente usado para definir uma interface para criar um objeto, deixando para subclasses decidirem qual objeto deve ser instanciado. Alexandre Macedo Melhorando seu código com Design Patterns www.k19.com.br
  • 23. Adapter Características I o objetivo do padrão Adapter é converter a interface de uma classe para uma outra interface que o sistema espera; Alexandre Macedo Melhorando seu código com Design Patterns www.k19.com.br
  • 24. Adapter Características I o objetivo do padrão Adapter é converter a interface de uma classe para uma outra interface que o sistema espera; I é utilizado quando mudanças diretas feitas na interface das classes não podem (ou não devem) ser feitas, então o Adapter é necessário para que as duas classes possam interagir entre si; Alexandre Macedo Melhorando seu código com Design Patterns www.k19.com.br
  • 25. Adapter Características I o objetivo do padrão Adapter é converter a interface de uma classe para uma outra interface que o sistema espera; I é utilizado quando mudanças diretas feitas na interface das classes não podem (ou não devem) ser feitas, então o Adapter é necessário para que as duas classes possam interagir entre si; I também conhecido como Wrapper. Alexandre Macedo Melhorando seu código com Design Patterns www.k19.com.br
  • 26. Adapter Diagrama Alexandre Macedo Melhorando seu código com Design Patterns www.k19.com.br
  • 27. Adapter Exemplo I se você já encontrou algum código antigo de Java é bem possível que tenha encontrado a interface Enumeration; I hoje em dia, até de acordo com a API da Orcle, é indicado utilizar a interface Iterator; I digamos que você tenha que utilizar uma API legada de um sistema mais antigo, que utiliza Enumeration e precisa integrar com um sistema mais recente que apenas utiliza Iterator; Alexandre Macedo Melhorando seu código com Design Patterns www.k19.com.br
  • 28. Adapter Exemplo I se você já encontrou algum código antigo de Java é bem possível que tenha encontrado a interface Enumeration; I hoje em dia, até de acordo com a API da Orcle, é indicado utilizar a interface Iterator; I digamos que você tenha que utilizar uma API legada de um sistema mais antigo, que utiliza Enumeration e precisa integrar com um sistema mais recente que apenas utiliza Iterator; I isso parece um trabalho para o Adapter. Alexandre Macedo Melhorando seu código com Design Patterns www.k19.com.br
  • 29. Adapter Exemplo Alexandre Macedo Melhorando seu código com Design Patterns www.k19.com.br
  • 30. Adapter Exemplo public class EnumerationIterator implements Iterator { private Enumeration colecao; public EnumerationIterator(Enumeration colecao) { this.colecao = colecao; } public boolean hasNext() { return this.colecao.hasMoreElements(); } public Object next() { return this.colecao.nextElement(); } public void remove() { throw new UnsupportedOperationException(); } } Alexandre Macedo Melhorando seu código com Design Patterns www.k19.com.br
  • 31. Observer Características I define uma relação de um-para-muitos entre objetos, de forma que, quando um objeto tem seu estado alterado, todos os seus dependentes são notificados e atualizados automaticamente; Alexandre Macedo Melhorando seu código com Design Patterns www.k19.com.br
  • 32. Observer Características I define uma relação de um-para-muitos entre objetos, de forma que, quando um objeto tem seu estado alterado, todos os seus dependentes são notificados e atualizados automaticamente; I também conhecido como Publish/Subscribe; Alexandre Macedo Melhorando seu código com Design Patterns www.k19.com.br
  • 33. Observer Características I define uma relação de um-para-muitos entre objetos, de forma que, quando um objeto tem seu estado alterado, todos os seus dependentes são notificados e atualizados automaticamente; I também conhecido como Publish/Subscribe; I muito utilizado em interfaces para Desktop; Alexandre Macedo Melhorando seu código com Design Patterns www.k19.com.br
  • 34. Observer Características I define uma relação de um-para-muitos entre objetos, de forma que, quando um objeto tem seu estado alterado, todos os seus dependentes são notificados e atualizados automaticamente; I também conhecido como Publish/Subscribe; I muito utilizado em interfaces para Desktop; Alexandre Macedo Melhorando seu código com Design Patterns www.k19.com.br
  • 35. Observer Exemplo public interface Observable { void register(Observer observer); void unregister(Observer observer); void notifyObservers(); } public interface Observer { void update(int i); } Alexandre Macedo Melhorando seu código com Design Patterns www.k19.com.br
  • 36. Observer Exemplo public class Aquecedor implements Observer { private Observable sensor; private boolean ligado; public Aquecedor(Observable sensor) { this.sensor = sensor; this.sensor.register(this); this.ligado = false; } public void update(int i) { if (i <= 16 && !ligado) { System.out.println("Temperatura: " + i + " -> Ligando o aquecedor..."); this.ligado = true; } else if (i > 16 && ligado) { System.out.println("Temperatura: " + i + " -> Desligando o aquecedor..."); this.ligado = false; } } } Alexandre Macedo Melhorando seu código com Design Patterns www.k19.com.br
  • 37. Observer Exemplo public class ArCondicionado implements Observer { private boolean ligado; private Observable sensor; public ArCondicionado(Observable sensor) { this.sensor = sensor; this.sensor.register(this); this.ligado = false; } public void update(int i) { if (i > 24 && !ligado) { System.out.println("Temperatura: " + i + " -> Ligando o ar condicionado..."); this.ligado = true; } else if (i <= 16 && ligado) { System.out.println("Temperatura: " + i + " -> Desligando o ar condicionado..."); this.ligado = false; } } } Alexandre Macedo Melhorando seu código com Design Patterns www.k19.com.br
  • 38. Observer Exemplo public class SensorDeTemperatura implements Observable { private int temperatura; List<Observer> observers = new ArrayList<Observer>();; public void setTemperatura(int temperatura) { if (this.temperatura != temperatura) { this.temperatura = temperatura; notifyObservers(); } } public void register(Observer observer) { this.observers.add(observer); } public void unregister(Observer observer) { this.observers.remove(observer); } public void notifyObservers() { for (Observer o : this.observers) { o.update(this.temperatura); } } } Alexandre Macedo Melhorando seu código com Design Patterns www.k19.com.br
  • 39. Observer Exemplo public class Principal { public static void main(String[] args) { SensorDeTemperatura sensor = new SensorDeTemperatura(); Observer ar = new ArCondicionado(sensor); Observer aquecedor = new Aquecedor(sensor); sensor.setTemperatura(22); sensor.setTemperatura(29); sensor.setTemperatura(15); sensor.setTemperatura(22); } } Temperatura: 29 -> Ligando o ar condicionado... Temperatura: 15 -> Desligando o ar condicionado... Temperatura: 15 -> Ligando o aquecedor... Temperatura: 22 -> Desligando o aquecedor... Alexandre Macedo Melhorando seu código com Design Patterns www.k19.com.br
  • 40. Obrigado! Dúvidas ou sugestões: contato@k19.com.br Para acompanhar as novidades confira o site: www.k19.com.br Ou siga-nos no Twitter: @k19treinamentos