Exemplos de Design Patterns em Java
-
Upload
alexmacedo -
Category
Technology
-
view
9.496 -
download
0
description
Transcript of Exemplos de Design Patterns em Java
![Page 1: Exemplos de Design Patterns em Java](https://reader033.fdocuments.net/reader033/viewer/2022042715/5590b0ff1a28abea058b4632/html5/thumbnails/1.jpg)
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
![Page 2: Exemplos de Design Patterns em Java](https://reader033.fdocuments.net/reader033/viewer/2022042715/5590b0ff1a28abea058b4632/html5/thumbnails/2.jpg)
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 umdeterminado contexto, e apresenta uma solução. Essa solução acabaganhando 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
![Page 3: Exemplos de Design Patterns em Java](https://reader033.fdocuments.net/reader033/viewer/2022042715/5590b0ff1a28abea058b4632/html5/thumbnails/3.jpg)
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 umdeterminado contexto, e apresenta uma solução. Essa solução acabaganhando 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
![Page 4: Exemplos de Design Patterns em Java](https://reader033.fdocuments.net/reader033/viewer/2022042715/5590b0ff1a28abea058b4632/html5/thumbnails/4.jpg)
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 umdeterminado contexto, e apresenta uma solução. Essa solução acabaganhando 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
![Page 5: Exemplos de Design Patterns em Java](https://reader033.fdocuments.net/reader033/viewer/2022042715/5590b0ff1a28abea058b4632/html5/thumbnails/5.jpg)
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 umdeterminado contexto, e apresenta uma solução. Essa solução acabaganhando 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
![Page 6: Exemplos de Design Patterns em Java](https://reader033.fdocuments.net/reader033/viewer/2022042715/5590b0ff1a28abea058b4632/html5/thumbnails/6.jpg)
Design Patterns
I Factory MethodI Abstract FactoryI BuilderI PrototypeI SingletonI AdapterI BridgeI CompositeI DecoratorI FacadeI FlyweigthI Proxy
I Chain of ResponsabilityI CommandI InterpreterI IteratorI MediatorI MementoI ObserverI StateI StrategyI Template MethodI Visitor
Alexandre Macedo Melhorando seu código com Design Patterns www.k19.com.br
![Page 7: Exemplos de Design Patterns em Java](https://reader033.fdocuments.net/reader033/viewer/2022042715/5590b0ff1a28abea058b4632/html5/thumbnails/7.jpg)
Design Patterns
I Factory MethodI Abstract FactoryI BuilderI PrototypeI SingletonI AdapterI BridgeI CompositeI DecoratorI FacadeI FlyweigthI Proxy
I Chain of ResponsabilityI CommandI InterpreterI IteratorI MediatorI MementoI ObserverI StateI StrategyI Template MethodI Visitor
Alexandre Macedo Melhorando seu código com Design Patterns www.k19.com.br
![Page 8: Exemplos de Design Patterns em Java](https://reader033.fdocuments.net/reader033/viewer/2022042715/5590b0ff1a28abea058b4632/html5/thumbnails/8.jpg)
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
![Page 9: Exemplos de Design Patterns em Java](https://reader033.fdocuments.net/reader033/viewer/2022042715/5590b0ff1a28abea058b4632/html5/thumbnails/9.jpg)
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
![Page 10: Exemplos de Design Patterns em Java](https://reader033.fdocuments.net/reader033/viewer/2022042715/5590b0ff1a28abea058b4632/html5/thumbnails/10.jpg)
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
![Page 11: Exemplos de Design Patterns em Java](https://reader033.fdocuments.net/reader033/viewer/2022042715/5590b0ff1a28abea058b4632/html5/thumbnails/11.jpg)
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
![Page 12: Exemplos de Design Patterns em Java](https://reader033.fdocuments.net/reader033/viewer/2022042715/5590b0ff1a28abea058b4632/html5/thumbnails/12.jpg)
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
![Page 13: Exemplos de Design Patterns em Java](https://reader033.fdocuments.net/reader033/viewer/2022042715/5590b0ff1a28abea058b4632/html5/thumbnails/13.jpg)
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
![Page 14: Exemplos de Design Patterns em Java](https://reader033.fdocuments.net/reader033/viewer/2022042715/5590b0ff1a28abea058b4632/html5/thumbnails/14.jpg)
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
![Page 15: Exemplos de Design Patterns em Java](https://reader033.fdocuments.net/reader033/viewer/2022042715/5590b0ff1a28abea058b4632/html5/thumbnails/15.jpg)
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
![Page 16: Exemplos de Design Patterns em Java](https://reader033.fdocuments.net/reader033/viewer/2022042715/5590b0ff1a28abea058b4632/html5/thumbnails/16.jpg)
Factory MethodCaracterísticas
I define uma maneira padrão de criar objetos;
I bom para encapsular informações necessárias no momento dainstanciação do objeto.
Alexandre Macedo Melhorando seu código com Design Patterns www.k19.com.br
![Page 17: Exemplos de Design Patterns em Java](https://reader033.fdocuments.net/reader033/viewer/2022042715/5590b0ff1a28abea058b4632/html5/thumbnails/17.jpg)
Factory MethodCaracterí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
![Page 18: Exemplos de Design Patterns em Java](https://reader033.fdocuments.net/reader033/viewer/2022042715/5590b0ff1a28abea058b4632/html5/thumbnails/18.jpg)
Factory MethodAntes (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
![Page 19: Exemplos de Design Patterns em Java](https://reader033.fdocuments.net/reader033/viewer/2022042715/5590b0ff1a28abea058b4632/html5/thumbnails/19.jpg)
Factory MethodExemplo 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
![Page 20: Exemplos de Design Patterns em Java](https://reader033.fdocuments.net/reader033/viewer/2022042715/5590b0ff1a28abea058b4632/html5/thumbnails/20.jpg)
Factory MethodDepois (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
![Page 21: Exemplos de Design Patterns em Java](https://reader033.fdocuments.net/reader033/viewer/2022042715/5590b0ff1a28abea058b4632/html5/thumbnails/21.jpg)
Factory MethodMais 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
![Page 22: Exemplos de Design Patterns em Java](https://reader033.fdocuments.net/reader033/viewer/2022042715/5590b0ff1a28abea058b4632/html5/thumbnails/22.jpg)
Factory MethodMais 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
![Page 23: Exemplos de Design Patterns em Java](https://reader033.fdocuments.net/reader033/viewer/2022042715/5590b0ff1a28abea058b4632/html5/thumbnails/23.jpg)
AdapterCaracterísticas
I o objetivo do padrão Adapter é converter a interface de uma classepara uma outra interface que o sistema espera;
I é utilizado quando mudanças diretas feitas na interface das classes nãopodem (ou não devem) ser feitas, então o Adapter é necessário paraque 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
![Page 24: Exemplos de Design Patterns em Java](https://reader033.fdocuments.net/reader033/viewer/2022042715/5590b0ff1a28abea058b4632/html5/thumbnails/24.jpg)
AdapterCaracterísticas
I o objetivo do padrão Adapter é converter a interface de uma classepara uma outra interface que o sistema espera;
I é utilizado quando mudanças diretas feitas na interface das classes nãopodem (ou não devem) ser feitas, então o Adapter é necessário paraque 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
![Page 25: Exemplos de Design Patterns em Java](https://reader033.fdocuments.net/reader033/viewer/2022042715/5590b0ff1a28abea058b4632/html5/thumbnails/25.jpg)
AdapterCaracterísticas
I o objetivo do padrão Adapter é converter a interface de uma classepara uma outra interface que o sistema espera;
I é utilizado quando mudanças diretas feitas na interface das classes nãopodem (ou não devem) ser feitas, então o Adapter é necessário paraque 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
![Page 26: Exemplos de Design Patterns em Java](https://reader033.fdocuments.net/reader033/viewer/2022042715/5590b0ff1a28abea058b4632/html5/thumbnails/26.jpg)
AdapterDiagrama
Alexandre Macedo Melhorando seu código com Design Patterns www.k19.com.br
![Page 27: Exemplos de Design Patterns em Java](https://reader033.fdocuments.net/reader033/viewer/2022042715/5590b0ff1a28abea058b4632/html5/thumbnails/27.jpg)
AdapterExemplo
I se você já encontrou algum código antigo de Java é bem possível quetenha encontrado a interface Enumeration;
I hoje em dia, até de acordo com a API da Orcle, é indicado utilizar ainterface Iterator;
I digamos que você tenha que utilizar uma API legada de um sistemamais antigo, que utiliza Enumeration e precisa integrar com um sistemamais 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
![Page 28: Exemplos de Design Patterns em Java](https://reader033.fdocuments.net/reader033/viewer/2022042715/5590b0ff1a28abea058b4632/html5/thumbnails/28.jpg)
AdapterExemplo
I se você já encontrou algum código antigo de Java é bem possível quetenha encontrado a interface Enumeration;
I hoje em dia, até de acordo com a API da Orcle, é indicado utilizar ainterface Iterator;
I digamos que você tenha que utilizar uma API legada de um sistemamais antigo, que utiliza Enumeration e precisa integrar com um sistemamais 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
![Page 29: Exemplos de Design Patterns em Java](https://reader033.fdocuments.net/reader033/viewer/2022042715/5590b0ff1a28abea058b4632/html5/thumbnails/29.jpg)
AdapterExemplo
Alexandre Macedo Melhorando seu código com Design Patterns www.k19.com.br
![Page 30: Exemplos de Design Patterns em Java](https://reader033.fdocuments.net/reader033/viewer/2022042715/5590b0ff1a28abea058b4632/html5/thumbnails/30.jpg)
AdapterExemplo
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
![Page 31: Exemplos de Design Patterns em Java](https://reader033.fdocuments.net/reader033/viewer/2022042715/5590b0ff1a28abea058b4632/html5/thumbnails/31.jpg)
ObserverCaracterí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 dependentessã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
![Page 32: Exemplos de Design Patterns em Java](https://reader033.fdocuments.net/reader033/viewer/2022042715/5590b0ff1a28abea058b4632/html5/thumbnails/32.jpg)
ObserverCaracterí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 dependentessã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
![Page 33: Exemplos de Design Patterns em Java](https://reader033.fdocuments.net/reader033/viewer/2022042715/5590b0ff1a28abea058b4632/html5/thumbnails/33.jpg)
ObserverCaracterí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 dependentessã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
![Page 34: Exemplos de Design Patterns em Java](https://reader033.fdocuments.net/reader033/viewer/2022042715/5590b0ff1a28abea058b4632/html5/thumbnails/34.jpg)
ObserverCaracterí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 dependentessã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
![Page 35: Exemplos de Design Patterns em Java](https://reader033.fdocuments.net/reader033/viewer/2022042715/5590b0ff1a28abea058b4632/html5/thumbnails/35.jpg)
ObserverExemplo
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
![Page 36: Exemplos de Design Patterns em Java](https://reader033.fdocuments.net/reader033/viewer/2022042715/5590b0ff1a28abea058b4632/html5/thumbnails/36.jpg)
ObserverExemplo
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
![Page 37: Exemplos de Design Patterns em Java](https://reader033.fdocuments.net/reader033/viewer/2022042715/5590b0ff1a28abea058b4632/html5/thumbnails/37.jpg)
ObserverExemplo
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
![Page 38: Exemplos de Design Patterns em Java](https://reader033.fdocuments.net/reader033/viewer/2022042715/5590b0ff1a28abea058b4632/html5/thumbnails/38.jpg)
ObserverExemplo
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
![Page 39: Exemplos de Design Patterns em Java](https://reader033.fdocuments.net/reader033/viewer/2022042715/5590b0ff1a28abea058b4632/html5/thumbnails/39.jpg)
ObserverExemplo
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
![Page 40: Exemplos de Design Patterns em Java](https://reader033.fdocuments.net/reader033/viewer/2022042715/5590b0ff1a28abea058b4632/html5/thumbnails/40.jpg)
Obrigado!
Dúvidas ou sugestões: [email protected] acompanhar as novidades confira o site: www.k19.com.br
Ou siga-nos no Twitter: @k19treinamentos