├── .classpath ├── .gitignore ├── .project ├── README.md └── src └── br └── padroes ├── abstractFactory ├── CarroPopular.java ├── CarroSedan.java ├── Cliente.java ├── FabricaDeCarro.java ├── FabricaFiat.java ├── FabricaFord.java ├── Fiesta.java ├── FiestaSedan.java ├── Palio.java └── Siena.java ├── adapter ├── Cliente.java ├── ImagemTarget.java ├── OpenGLImage.java ├── OpenGLImageAdapter.java ├── SDLImagemAdapter.java └── SDL_Surface.java ├── bridge ├── Cliente.java ├── JanelaAbstrata.java ├── JanelaAviso.java ├── JanelaDialogo.java ├── JanelaImplementada.java ├── JanelaLinux.java └── JanelaWindows.java ├── builder ├── CarroBuilder.java ├── CarroProduct.java ├── Cliente.java ├── ConcessionariaDirector.java ├── FiatBuilder.java └── VolksBuilder.java ├── chain ├── BancoA.java ├── BancoB.java ├── BancoC.java ├── BancoChain.java ├── BancoD.java ├── Cliente.java └── IDBancos.java ├── command ├── Cliente.java ├── Compra.java ├── Loja.java ├── PagamentoBoleto.java ├── PagamentoCartaoCredito.java ├── PagamentoCartaoDebito.java └── PagamentoCommand.java ├── composite ├── seguro │ ├── ArquivoComponent.java │ ├── ArquivoComposite.java │ ├── ArquivoVideo.java │ └── Main.java └── transparente │ ├── ArquivoComponent.java │ ├── ArquivoComposite.java │ ├── ArquivoVideo.java │ └── Main.java ├── decorator ├── Cachaca.java ├── Coquetel.java ├── CoquetelDecorator.java ├── Main.java └── Refrigerante.java ├── facade ├── Cliente.java ├── SistemaDeAudio.java ├── SistemaDeInput.java ├── SistemaDeVideo.java └── SistemasFacade.java ├── factoryMethod ├── Carro.java ├── Celta.java ├── Cliente.java ├── FabricaChevrolet.java ├── FabricaDeCarro.java ├── FabricaFiat.java ├── FabricaFord.java ├── FabricaWolks.java ├── Fiesta.java ├── Gol.java └── Palio.java ├── flyweight ├── Cliente.java ├── FlyweightFactory.java ├── Imagem.java ├── Ponto.java ├── Sprite.java └── SpriteFlyweight.java ├── interpreter ├── Cliente.java ├── Contexto.java ├── DoisDigitosRomano.java ├── NumeroRomanoInterpreter.java ├── QuatroDigitosRomano.java ├── TresDigitosRomano.java └── UmDigitoRomano.java ├── iterator ├── AgregadoDeCanais.java ├── CanaisEsportes.java ├── Canal.java ├── IteradorCanais.java └── Main.java ├── iteratorExterno ├── AgregadoDeCanais.java ├── CanaisEsportes.java ├── CanaisFilmes.java ├── Canal.java ├── IteradorInterface.java ├── IteradorListaDeCanais.java ├── IteradorMatrizDeCanais.java └── Main.java ├── iteratorInterno ├── IteradorInterno.java ├── IteradorPrint.java └── Main.java ├── mediator ├── AndroidColleague.java ├── Cliente.java ├── Colleague.java ├── IOSColleague.java ├── Mediator.java ├── MensagemMediator.java └── SymbianColleague.java ├── memento ├── Cliente.java ├── Texto.java ├── TextoCareTaker.java └── TextoMemento.java ├── observer ├── BarraObserver.java ├── Cliente.java ├── Dados.java ├── DadosObserver.java ├── DadosSubject.java ├── PorcentoObserver.java └── TabelaObserver.java ├── prototype ├── CarroPrototype.java ├── Cliente.java ├── FiestaPrototype.java ├── GolPrototype.java └── PalioPrototype.java ├── proxy ├── BancoProxy.java ├── BancoUsuarios.java └── Cliente.java ├── state ├── Cliente.java ├── Mario.java ├── MarioCapa.java ├── MarioFogo.java ├── MarioGrande.java ├── MarioMorto.java ├── MarioPequeno.java └── MarioState.java ├── strategy ├── CalculaImposto.java ├── CalculoImpostoQuinzeOuDez.java ├── CalculoImpostoVinteOuQuinze.java ├── Funcionario.java └── Main.java ├── templateMethod ├── Cliente.java ├── ModoDeReproducao.java ├── MusicaMP3.java ├── OrdenadorPorAno.java ├── OrdenadorPorAutor.java ├── OrdenadorPorEstrela.java ├── OrdenadorPorNome.java ├── OrdenadorTemplate.java └── PlayList.java └── visitor ├── ArvoreBinaria.java ├── ArvoreVisitor.java ├── Cliente.java ├── ExibirInOrderVisitor.java ├── ExibirIndentadoVisitor.java ├── ExibirPostOrderVisitor.java ├── ExibirPreOrdemVisitor.java └── No.java /.classpath: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | bin/ 2 | -------------------------------------------------------------------------------- /.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | Padrões de Projeto 4 | 5 | 6 | 7 | 8 | 9 | org.eclipse.jdt.core.javabuilder 10 | 11 | 12 | 13 | 14 | 15 | org.eclipse.jdt.core.javanature 16 | 17 | 18 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Neste repositório existem exemplos de utilização de Padrões de Projeto documentados pela Gangue dos Quatro implementados em Java. 2 | 3 | Para saber mais informações sobre os problemas abordados em cada um dos projetos acesse: [brizeno.wordpress.com/padroes](https://brizeno.wordpress.com/padroes/) 4 | 5 | __Padrões implementados:__ 6 | 7 | ### Strategy 8 | [Separando os dados dos algoritmos para alcançar a reusabilidade!](http://wp.me/s1Mek8-strategy) 9 | 10 | ### Decorator 11 | [Incrementando funcionalidades dinamicamente!](http://wp.me/p1Mek8-h) 12 | 13 | ### Composite 14 | [Tratando todos os objetos com justiça!](http://wp.me/p1Mek8-M) 15 | 16 | ### Iterator 17 | [Percorrendo um conjunto de dados independente da implementação!](http://wp.me/p1Mek8-15) 18 | 19 | ### Factory Method 20 | [Criando objetos on the fly com alta flexibilidade!](http://wp.me/p1Mek8-1c) 21 | 22 | ### Abstract Factory 23 | [Criando famílias de objetos on the fly com alta flexibilidade!](http://wp.me/p1Mek8-1h) 24 | 25 | ### Template Method 26 | [Definindo algoritmos extensíveis!](http://wp.me/p1Mek8-1C) 27 | 28 | ### Singleton 29 | [Centralizando e compartilhando recursos!](http://wp.me/p1Mek8-1Z) 30 | 31 | ### Builder 32 | [Construindo o produto passo-a-passo!](http://wp.me/p1Mek8-2a) 33 | 34 | ### Proxy 35 | [Redirecionando o acesso aos objetos!](http://wp.me/p1Mek8-2o) 36 | 37 | ### Adapter 38 | [Plugando conteúdo ao sistema!](http://wp.me/p1Mek8-2z) 39 | 40 | ### Bridge 41 | [Separando implementações de abstrações em prol da flexibilidade!](http://wp.me/p1Mek8-2K) 42 | 43 | ### Observer 44 | [Compartilhando recursos de maneira inteligente!](http://wp.me/p1Mek8-2T) 45 | 46 | ### Mediator 47 | [Simplificando relacionamentos complexos!](http://wp.me/p1Mek8-3l) 48 | 49 | ### Command 50 | [Transformando requisições em objetos!](http://wp.me/p1Mek8-3y) 51 | 52 | ### Memento 53 | [Externalizando estados sem quebrar o encapsulamento!](http://wp.me/p1Mek8-3I) 54 | 55 | ### Flyweight 56 | [Compartilhando pequenos recursos para economizar espaço!](http://wp.me/p1Mek8-45) 57 | 58 | ### Facade 59 | [Simplificando a utilização de subsistemas complexos!](http://wp.me/p1Mek8-4c) 60 | 61 | ### Interpreter 62 | [Definindo uma gramática e um interpretador!](http://wp.me/p1Mek8-4o) 63 | 64 | ### State 65 | [Simplificando a troca de estados internos de um objeto!](http://wp.me/p1Mek8-4y) 66 | 67 | ### Visitor 68 | [Separando operações de estruturas!](http://wp.me/p1Mek8-4K) 69 | 70 | ### Prototype 71 | [Criando objetos por cópia de uma instância!](http://wp.me/p1Mek8-51) 72 | -------------------------------------------------------------------------------- /src/br/padroes/abstractFactory/CarroPopular.java: -------------------------------------------------------------------------------- 1 | package br.padroes.abstractFactory; 2 | 3 | public interface CarroPopular { 4 | void exibirInfoPopular(); 5 | } 6 | -------------------------------------------------------------------------------- /src/br/padroes/abstractFactory/CarroSedan.java: -------------------------------------------------------------------------------- 1 | package br.padroes.abstractFactory; 2 | 3 | public interface CarroSedan { 4 | void exibirInfoSedan(); 5 | } 6 | -------------------------------------------------------------------------------- /src/br/padroes/abstractFactory/Cliente.java: -------------------------------------------------------------------------------- 1 | package br.padroes.abstractFactory; 2 | 3 | public class Cliente { 4 | public static void main(String[] args) { 5 | FabricaDeCarro fabrica = new FabricaFiat(); 6 | CarroSedan sedan = fabrica.criarCarroSedan(); 7 | CarroPopular popular = fabrica.criarCarroPopular(); 8 | sedan.exibirInfoSedan(); 9 | System.out.println(); 10 | popular.exibirInfoPopular(); 11 | System.out.println(); 12 | 13 | fabrica = new FabricaFord(); 14 | sedan = fabrica.criarCarroSedan(); 15 | popular = fabrica.criarCarroPopular(); 16 | sedan.exibirInfoSedan(); 17 | System.out.println(); 18 | popular.exibirInfoPopular(); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/br/padroes/abstractFactory/FabricaDeCarro.java: -------------------------------------------------------------------------------- 1 | package br.padroes.abstractFactory; 2 | 3 | public interface FabricaDeCarro { 4 | CarroSedan criarCarroSedan(); 5 | CarroPopular criarCarroPopular(); 6 | } 7 | -------------------------------------------------------------------------------- /src/br/padroes/abstractFactory/FabricaFiat.java: -------------------------------------------------------------------------------- 1 | package br.padroes.abstractFactory; 2 | 3 | public class FabricaFiat implements FabricaDeCarro { 4 | 5 | @Override 6 | public CarroSedan criarCarroSedan() { 7 | return new Siena(); 8 | } 9 | 10 | @Override 11 | public CarroPopular criarCarroPopular() { 12 | return new Palio(); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /src/br/padroes/abstractFactory/FabricaFord.java: -------------------------------------------------------------------------------- 1 | package br.padroes.abstractFactory; 2 | 3 | public class FabricaFord implements FabricaDeCarro { 4 | 5 | @Override 6 | public CarroSedan criarCarroSedan() { 7 | return new FiestaSedan(); 8 | } 9 | 10 | @Override 11 | public CarroPopular criarCarroPopular() { 12 | return new Fiesta(); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /src/br/padroes/abstractFactory/Fiesta.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarcosX/Padr-es-de-Projeto/69c10c862069194ab455829395ea500fc96a76b4/src/br/padroes/abstractFactory/Fiesta.java -------------------------------------------------------------------------------- /src/br/padroes/abstractFactory/FiestaSedan.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarcosX/Padr-es-de-Projeto/69c10c862069194ab455829395ea500fc96a76b4/src/br/padroes/abstractFactory/FiestaSedan.java -------------------------------------------------------------------------------- /src/br/padroes/abstractFactory/Palio.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarcosX/Padr-es-de-Projeto/69c10c862069194ab455829395ea500fc96a76b4/src/br/padroes/abstractFactory/Palio.java -------------------------------------------------------------------------------- /src/br/padroes/abstractFactory/Siena.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarcosX/Padr-es-de-Projeto/69c10c862069194ab455829395ea500fc96a76b4/src/br/padroes/abstractFactory/Siena.java -------------------------------------------------------------------------------- /src/br/padroes/adapter/Cliente.java: -------------------------------------------------------------------------------- 1 | package br.padroes.adapter; 2 | 3 | public class Cliente { 4 | public static void main(String[] args) { 5 | ImagemTarget imagem = new SDLImagemAdapter(); 6 | imagem.carregarImagem("teste.png"); 7 | imagem.desenharImagem(0, 0, 10, 10); 8 | 9 | imagem = new OpenGLImageAdapter(); 10 | imagem.carregarImagem("teste.png"); 11 | imagem.desenharImagem(0, 0, 10, 10); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/br/padroes/adapter/ImagemTarget.java: -------------------------------------------------------------------------------- 1 | package br.padroes.adapter; 2 | 3 | public interface ImagemTarget { 4 | void carregarImagem(String nomeDoArquivo); 5 | 6 | void desenharImagem(int posX, int posY, int largura, int altura); 7 | } 8 | -------------------------------------------------------------------------------- /src/br/padroes/adapter/OpenGLImage.java: -------------------------------------------------------------------------------- 1 | package br.padroes.adapter; 2 | 3 | public class OpenGLImage { 4 | 5 | public void glCarregarImagem(String arquivo) { 6 | System.out.println("Imagem " + arquivo + " carregada."); 7 | } 8 | 9 | public void glDesenharImagem(int posicaoX, int posicaoY) { 10 | System.out.println("OpenGL Image desenhada"); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/br/padroes/adapter/OpenGLImageAdapter.java: -------------------------------------------------------------------------------- 1 | package br.padroes.adapter; 2 | 3 | public class OpenGLImageAdapter extends OpenGLImage implements ImagemTarget { 4 | 5 | @Override 6 | public void carregarImagem(String nomeDoArquivo) { 7 | glCarregarImagem(nomeDoArquivo); 8 | } 9 | 10 | @Override 11 | public void desenharImagem(int posX, int posY, int largura, int altura) { 12 | glDesenharImagem(posX, posY); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /src/br/padroes/adapter/SDLImagemAdapter.java: -------------------------------------------------------------------------------- 1 | package br.padroes.adapter; 2 | 3 | public class SDLImagemAdapter extends SDL_Surface implements ImagemTarget { 4 | 5 | @Override 6 | public void carregarImagem(String nomeDoArquivo) { 7 | SDL_CarregarSurface(nomeDoArquivo); 8 | } 9 | 10 | @Override 11 | public void desenharImagem(int posX, int posY, int largura, int altura) { 12 | SDL_DesenharSurface(largura, altura, posX, posY); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/br/padroes/adapter/SDL_Surface.java: -------------------------------------------------------------------------------- 1 | package br.padroes.adapter; 2 | 3 | public class SDL_Surface { 4 | 5 | public void SDL_CarregarSurface(String arquivo) { 6 | System.out.println("Imagem " + arquivo + " carregada."); 7 | } 8 | 9 | public void SDL_DesenharSurface(int largura, int altura, int posicaoX, 10 | int posicaoY) { 11 | System.out.println("SDL_Surface desenhada"); 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /src/br/padroes/bridge/Cliente.java: -------------------------------------------------------------------------------- 1 | package br.padroes.bridge; 2 | 3 | public class Cliente { 4 | public static void main(String[] args) { 5 | JanelaAbstrata janela = new JanelaDialogo(new JanelaLinux()); 6 | janela.desenhar(); 7 | janela = new JanelaAviso(new JanelaLinux()); 8 | janela.desenhar(); 9 | 10 | janela = new JanelaDialogo(new JanelaWindows()); 11 | janela.desenhar(); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/br/padroes/bridge/JanelaAbstrata.java: -------------------------------------------------------------------------------- 1 | package br.padroes.bridge; 2 | 3 | public abstract class JanelaAbstrata { 4 | 5 | protected JanelaImplementada janela; 6 | 7 | public JanelaAbstrata(JanelaImplementada j) { 8 | janela = j; 9 | } 10 | 11 | public void desenharJanela(String titulo) { 12 | janela.desenharJanela(titulo); 13 | } 14 | 15 | public void desenharBotao(String titulo) { 16 | janela.desenharBotao(titulo); 17 | } 18 | 19 | public abstract void desenhar(); 20 | 21 | } 22 | -------------------------------------------------------------------------------- /src/br/padroes/bridge/JanelaAviso.java: -------------------------------------------------------------------------------- 1 | package br.padroes.bridge; 2 | 3 | public class JanelaAviso extends JanelaAbstrata { 4 | 5 | public JanelaAviso(JanelaImplementada j) { 6 | super(j); 7 | } 8 | 9 | @Override 10 | public void desenhar() { 11 | desenharJanela("Janela de Aviso"); 12 | desenharBotao("Ok"); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /src/br/padroes/bridge/JanelaDialogo.java: -------------------------------------------------------------------------------- 1 | package br.padroes.bridge; 2 | 3 | public class JanelaDialogo extends JanelaAbstrata { 4 | 5 | public JanelaDialogo(JanelaImplementada j) { 6 | super(j); 7 | } 8 | 9 | @Override 10 | public void desenhar() { 11 | desenharJanela("Janela de Diálogo"); 12 | desenharBotao("Botão Sim"); 13 | desenharBotao("Botão Não"); 14 | desenharBotao("Botão Cancelar"); 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /src/br/padroes/bridge/JanelaImplementada.java: -------------------------------------------------------------------------------- 1 | package br.padroes.bridge; 2 | 3 | public interface JanelaImplementada { 4 | 5 | void desenharJanela(String titulo); 6 | 7 | void desenharBotao(String titulo); 8 | 9 | } 10 | -------------------------------------------------------------------------------- /src/br/padroes/bridge/JanelaLinux.java: -------------------------------------------------------------------------------- 1 | package br.padroes.bridge; 2 | public class JanelaLinux implements JanelaImplementada { 3 | 4 | @Override 5 | public void desenharJanela(String titulo) { 6 | System.out.println(titulo + " - Janela Linux"); 7 | } 8 | 9 | @Override 10 | public void desenharBotao(String titulo) { 11 | System.out.println(titulo + " - Botão Linux"); 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /src/br/padroes/bridge/JanelaWindows.java: -------------------------------------------------------------------------------- 1 | package br.padroes.bridge; 2 | 3 | public class JanelaWindows implements JanelaImplementada { 4 | 5 | @Override 6 | public void desenharJanela(String titulo) { 7 | System.out.println(titulo + " - Janela Windows"); 8 | } 9 | 10 | @Override 11 | public void desenharBotao(String titulo) { 12 | System.out.println(titulo + " - Botão Windows"); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /src/br/padroes/builder/CarroBuilder.java: -------------------------------------------------------------------------------- 1 | package br.padroes.builder; 2 | 3 | public abstract class CarroBuilder { 4 | protected CarroProduct carro = new CarroProduct(); 5 | public abstract void buildPreco(); 6 | public abstract void buildDscMotor(); 7 | public abstract void buildAnoDeFabricacao(); 8 | public abstract void buildModelo(); 9 | public abstract void buildMontadora(); 10 | public CarroProduct getCarro(){ 11 | return carro; 12 | }; 13 | } 14 | -------------------------------------------------------------------------------- /src/br/padroes/builder/CarroProduct.java: -------------------------------------------------------------------------------- 1 | package br.padroes.builder; 2 | 3 | public class CarroProduct { 4 | public double preco; 5 | public String dscMotor; 6 | public int anoDeFabricacao; 7 | public String modelo; 8 | public String montadora; 9 | } 10 | -------------------------------------------------------------------------------- /src/br/padroes/builder/Cliente.java: -------------------------------------------------------------------------------- 1 | package br.padroes.builder; 2 | 3 | public class Cliente { 4 | public static void main(String[] args) { 5 | ConcessionariaDirector concessionaria = new ConcessionariaDirector( 6 | new FiatBuilder()); 7 | 8 | concessionaria.construirCarro(); 9 | CarroProduct carro = concessionaria.getCarro(); 10 | System.out.println("Carro: " + carro.modelo + "/" + carro.montadora 11 | + "\nAno: " + carro.anoDeFabricacao + "\nMotor: " 12 | + carro.dscMotor + "\nValor: " + carro.preco); 13 | 14 | System.out.println(); 15 | 16 | concessionaria = new ConcessionariaDirector(new VolksBuilder()); 17 | concessionaria.construirCarro(); 18 | carro = concessionaria.getCarro(); 19 | System.out.println("Carro: " + carro.modelo + "/" + carro.montadora 20 | + "\nAno: " + carro.anoDeFabricacao + "\nMotor: " 21 | + carro.dscMotor + "\nValor: " + carro.preco); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/br/padroes/builder/ConcessionariaDirector.java: -------------------------------------------------------------------------------- 1 | package br.padroes.builder; 2 | 3 | public class ConcessionariaDirector { 4 | protected CarroBuilder montadora; 5 | 6 | public ConcessionariaDirector(CarroBuilder montadora) { 7 | this.montadora = montadora; 8 | } 9 | 10 | public void construirCarro() { 11 | montadora.buildPreco(); 12 | montadora.buildAnoDeFabricacao(); 13 | montadora.buildDscMotor(); 14 | montadora.buildModelo(); 15 | montadora.buildMontadora(); 16 | } 17 | 18 | public CarroProduct getCarro() { 19 | return montadora.getCarro(); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/br/padroes/builder/FiatBuilder.java: -------------------------------------------------------------------------------- 1 | package br.padroes.builder; 2 | 3 | public class FiatBuilder extends CarroBuilder { 4 | 5 | @Override 6 | public void buildPreco() { 7 | carro.preco = 1000.00; 8 | } 9 | 10 | @Override 11 | public void buildDscMotor() { 12 | carro.dscMotor = "1.0 Flex"; 13 | } 14 | 15 | @Override 16 | public void buildAnoDeFabricacao() { 17 | carro.anoDeFabricacao = 2010; 18 | } 19 | 20 | @Override 21 | public void buildModelo() { 22 | carro.modelo = "Palio"; 23 | } 24 | 25 | @Override 26 | public void buildMontadora() { 27 | carro.montadora = "Fiat"; 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /src/br/padroes/builder/VolksBuilder.java: -------------------------------------------------------------------------------- 1 | package br.padroes.builder; 2 | 3 | public class VolksBuilder extends CarroBuilder { 4 | @Override 5 | public void buildPreco() { 6 | carro.preco = 1000.00; 7 | } 8 | 9 | @Override 10 | public void buildDscMotor() { 11 | carro.dscMotor = "1.0 Flex"; 12 | } 13 | 14 | @Override 15 | public void buildAnoDeFabricacao() { 16 | carro.anoDeFabricacao = 2010; 17 | } 18 | 19 | @Override 20 | public void buildModelo() { 21 | carro.modelo = "Gol"; 22 | } 23 | 24 | @Override 25 | public void buildMontadora() { 26 | carro.montadora = "VolskWagem"; 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /src/br/padroes/chain/BancoA.java: -------------------------------------------------------------------------------- 1 | package br.padroes.chain; 2 | 3 | public class BancoA extends BancoChain { 4 | 5 | public BancoA() { 6 | super(IDBancos.bancoA); 7 | } 8 | 9 | @Override 10 | protected void efetuaPagamento() { 11 | System.out.println("Pagamento efetuado no banco A"); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/br/padroes/chain/BancoB.java: -------------------------------------------------------------------------------- 1 | package br.padroes.chain; 2 | 3 | public class BancoB extends BancoChain { 4 | 5 | public BancoB() { 6 | super(IDBancos.bancoB); 7 | } 8 | 9 | @Override 10 | protected void efetuaPagamento() { 11 | System.out.println("Pagamento efetuado no banco B"); 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /src/br/padroes/chain/BancoC.java: -------------------------------------------------------------------------------- 1 | package br.padroes.chain; 2 | 3 | public class BancoC extends BancoChain { 4 | 5 | public BancoC() { 6 | super(IDBancos.bancoC); 7 | } 8 | 9 | @Override 10 | protected void efetuaPagamento() { 11 | System.out.println("Pagamento efetuado no banco C"); 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /src/br/padroes/chain/BancoChain.java: -------------------------------------------------------------------------------- 1 | package br.padroes.chain; 2 | 3 | public abstract class BancoChain { 4 | 5 | protected BancoChain next; 6 | protected IDBancos identificadorDoBanco; 7 | 8 | public BancoChain(IDBancos id) { 9 | next = null; 10 | identificadorDoBanco = id; 11 | } 12 | 13 | public void setNext(BancoChain forma) { 14 | if (next == null) { 15 | next = forma; 16 | } else { 17 | next.setNext(forma); 18 | } 19 | } 20 | 21 | public void efetuarPagamento(IDBancos id) throws Exception { 22 | if (podeEfetuarPagamento(id)) { 23 | efetuaPagamento(); 24 | } else { 25 | if (next == null) { 26 | throw new Exception("banco não cadastrado"); 27 | } 28 | next.efetuarPagamento(id); 29 | } 30 | } 31 | 32 | private boolean podeEfetuarPagamento(IDBancos id) { 33 | if (identificadorDoBanco == id) { 34 | return true; 35 | } 36 | return false; 37 | } 38 | 39 | protected abstract void efetuaPagamento(); 40 | 41 | } 42 | -------------------------------------------------------------------------------- /src/br/padroes/chain/BancoD.java: -------------------------------------------------------------------------------- 1 | package br.padroes.chain; 2 | 3 | public class BancoD extends BancoChain { 4 | 5 | public BancoD() { 6 | super(IDBancos.bancoD); 7 | } 8 | 9 | @Override 10 | protected void efetuaPagamento() { 11 | System.out.println("Pagamento efetuado no banco D"); 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /src/br/padroes/chain/Cliente.java: -------------------------------------------------------------------------------- 1 | package br.padroes.chain; 2 | 3 | public class Cliente { 4 | public static void main(String[] args) { 5 | BancoChain bancos = new BancoA(); 6 | bancos.setNext(new BancoB()); 7 | bancos.setNext(new BancoC()); 8 | bancos.setNext(new BancoD()); 9 | 10 | try { 11 | bancos.efetuarPagamento(IDBancos.bancoC); 12 | bancos.efetuarPagamento(IDBancos.bancoD); 13 | bancos.efetuarPagamento(IDBancos.bancoA); 14 | bancos.efetuarPagamento(IDBancos.bancoB); 15 | } catch (Exception e) { 16 | e.printStackTrace(); 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/br/padroes/chain/IDBancos.java: -------------------------------------------------------------------------------- 1 | package br.padroes.chain; 2 | 3 | public enum IDBancos { 4 | bancoA, bancoB, bancoC, bancoD 5 | } 6 | -------------------------------------------------------------------------------- /src/br/padroes/command/Cliente.java: -------------------------------------------------------------------------------- 1 | package br.padroes.command; 2 | 3 | public class Cliente { 4 | public static void main(String[] args) { 5 | Loja lojasAfricanas = new Loja("Afriacanas"); 6 | lojasAfricanas.executarCompra(999.00, new PagamentoCartaoCredito()); 7 | lojasAfricanas.executarCompra(49.00, new PagamentoBoleto()); 8 | lojasAfricanas.executarCompra(99.00, new PagamentoCartaoDebito()); 9 | 10 | Loja exorbitante = new Loja("Exorbitante"); 11 | exorbitante.executarCompra(19.00, new PagamentoCartaoCredito()); 12 | 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/br/padroes/command/Compra.java: -------------------------------------------------------------------------------- 1 | package br.padroes.command; 2 | 3 | public class Compra { 4 | private static int CONTADOR_ID; 5 | protected int idNotaFiscal; 6 | protected String nomeDaLoja; 7 | protected double valorTotal; 8 | 9 | public Compra(String nomeDaLoja) { 10 | this.nomeDaLoja = nomeDaLoja; 11 | idNotaFiscal = ++CONTADOR_ID; 12 | } 13 | 14 | public void setValor(double valor) { 15 | this.valorTotal = valor; 16 | } 17 | 18 | public String getInfoNota() { 19 | return new String("Nota fiscal nº: " + idNotaFiscal + "\nLoja: " 20 | + nomeDaLoja + "\nValor: " + valorTotal); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/br/padroes/command/Loja.java: -------------------------------------------------------------------------------- 1 | package br.padroes.command; 2 | 3 | public class Loja { 4 | protected String nomeDaLoja; 5 | 6 | public Loja(String nome) { 7 | nomeDaLoja = nome; 8 | } 9 | 10 | public void executarCompra(double valor, PagamentoCommand formaDePagamento) { 11 | Compra compra = new Compra(nomeDaLoja); 12 | compra.setValor(valor); 13 | formaDePagamento.processarCompra(compra); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/br/padroes/command/PagamentoBoleto.java: -------------------------------------------------------------------------------- 1 | package br.padroes.command; 2 | 3 | public class PagamentoBoleto implements PagamentoCommand { 4 | 5 | @Override 6 | public void processarCompra(Compra compra) { 7 | System.out.println("Boleto criado!\n" + compra.getInfoNota()); 8 | } 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/br/padroes/command/PagamentoCartaoCredito.java: -------------------------------------------------------------------------------- 1 | package br.padroes.command; 2 | 3 | public class PagamentoCartaoCredito implements PagamentoCommand { 4 | 5 | @Override 6 | public void processarCompra(Compra compra) { 7 | System.out.println("Compra emitida!\n" + compra.getInfoNota()); 8 | } 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/br/padroes/command/PagamentoCartaoDebito.java: -------------------------------------------------------------------------------- 1 | package br.padroes.command; 2 | 3 | public class PagamentoCartaoDebito implements PagamentoCommand { 4 | 5 | @Override 6 | public void processarCompra(Compra compra) { 7 | System.out.println("Compra debitada!\n" + compra.getInfoNota()); 8 | } 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/br/padroes/command/PagamentoCommand.java: -------------------------------------------------------------------------------- 1 | package br.padroes.command; 2 | 3 | public interface PagamentoCommand { 4 | void processarCompra(Compra compra); 5 | } 6 | -------------------------------------------------------------------------------- /src/br/padroes/composite/seguro/ArquivoComponent.java: -------------------------------------------------------------------------------- 1 | package br.padroes.composite.seguro; 2 | 3 | public abstract class ArquivoComponent { 4 | String nomeDoArquivo; 5 | 6 | public String getNomedoArquivo() { 7 | return this.nomeDoArquivo; 8 | } 9 | 10 | public void printNomeDoArquivo() { 11 | System.out.println(this.nomeDoArquivo); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/br/padroes/composite/seguro/ArquivoComposite.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarcosX/Padr-es-de-Projeto/69c10c862069194ab455829395ea500fc96a76b4/src/br/padroes/composite/seguro/ArquivoComposite.java -------------------------------------------------------------------------------- /src/br/padroes/composite/seguro/ArquivoVideo.java: -------------------------------------------------------------------------------- 1 | package br.padroes.composite.seguro; 2 | 3 | public class ArquivoVideo extends ArquivoComponent { 4 | public ArquivoVideo(String nomeDoArquivo) { 5 | this.nomeDoArquivo = nomeDoArquivo; 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /src/br/padroes/composite/seguro/Main.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarcosX/Padr-es-de-Projeto/69c10c862069194ab455829395ea500fc96a76b4/src/br/padroes/composite/seguro/Main.java -------------------------------------------------------------------------------- /src/br/padroes/composite/transparente/ArquivoComponent.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarcosX/Padr-es-de-Projeto/69c10c862069194ab455829395ea500fc96a76b4/src/br/padroes/composite/transparente/ArquivoComponent.java -------------------------------------------------------------------------------- /src/br/padroes/composite/transparente/ArquivoComposite.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarcosX/Padr-es-de-Projeto/69c10c862069194ab455829395ea500fc96a76b4/src/br/padroes/composite/transparente/ArquivoComposite.java -------------------------------------------------------------------------------- /src/br/padroes/composite/transparente/ArquivoVideo.java: -------------------------------------------------------------------------------- 1 | package br.padroes.composite.transparente; 2 | 3 | public class ArquivoVideo extends ArquivoComponent { 4 | 5 | public ArquivoVideo(String nomeDoArquivo) { 6 | this.nomeDoArquivo = nomeDoArquivo; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/br/padroes/composite/transparente/Main.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarcosX/Padr-es-de-Projeto/69c10c862069194ab455829395ea500fc96a76b4/src/br/padroes/composite/transparente/Main.java -------------------------------------------------------------------------------- /src/br/padroes/decorator/Cachaca.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarcosX/Padr-es-de-Projeto/69c10c862069194ab455829395ea500fc96a76b4/src/br/padroes/decorator/Cachaca.java -------------------------------------------------------------------------------- /src/br/padroes/decorator/Coquetel.java: -------------------------------------------------------------------------------- 1 | package br.padroes.decorator; 2 | 3 | public abstract class Coquetel { 4 | String nome; 5 | double preco; 6 | 7 | public String getNome() { 8 | return nome; 9 | } 10 | 11 | public double getPreco() { 12 | return preco; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/br/padroes/decorator/CoquetelDecorator.java: -------------------------------------------------------------------------------- 1 | package br.padroes.decorator; 2 | 3 | public abstract class CoquetelDecorator extends Coquetel { 4 | Coquetel coquetel; 5 | 6 | public CoquetelDecorator(Coquetel umCoquetel) { 7 | coquetel = umCoquetel; 8 | } 9 | 10 | @Override 11 | public String getNome() { 12 | return coquetel.getNome() + " + " + nome; 13 | } 14 | 15 | public double getPreco() { 16 | return coquetel.getPreco() + preco; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/br/padroes/decorator/Main.java: -------------------------------------------------------------------------------- 1 | package br.padroes.decorator; 2 | 3 | public class Main { 4 | public static void main(String[] args) { 5 | Coquetel meuCoquetel = new Cachaca(); 6 | System.out.println(meuCoquetel.getNome() + " = " 7 | + meuCoquetel.getPreco()); 8 | 9 | meuCoquetel = new Refrigerante(meuCoquetel); 10 | System.out.println(meuCoquetel.getNome() + " = " 11 | + meuCoquetel.getPreco()); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/br/padroes/decorator/Refrigerante.java: -------------------------------------------------------------------------------- 1 | package br.padroes.decorator; 2 | 3 | public class Refrigerante extends CoquetelDecorator { 4 | 5 | public Refrigerante(Coquetel umCoquetel) { 6 | super(umCoquetel); 7 | nome = "Refrigerante"; 8 | preco = 1.0; 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /src/br/padroes/facade/Cliente.java: -------------------------------------------------------------------------------- 1 | package br.padroes.facade; 2 | 3 | public class Cliente { 4 | public static void main(String[] args) { 5 | System.out.println("##### Configurando subsistemas #####"); 6 | SistemasFacade fachada = new SistemasFacade(); 7 | fachada.inicializarSubsistemas(); 8 | 9 | System.out.println("##### Utilizando subsistemas #####"); 10 | fachada.renderizarImagem("imagem.png"); 11 | fachada.reproduzirAudio("teste.mp3"); 12 | fachada.lerInput(); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/br/padroes/facade/SistemaDeAudio.java: -------------------------------------------------------------------------------- 1 | package br.padroes.facade; 2 | 3 | public class SistemaDeAudio { 4 | 5 | public void configurarFrequencia() { 6 | System.out.println("Frequencia configurada"); 7 | } 8 | 9 | public void configurarVolume() { 10 | System.out.println("Volume configurado"); 11 | } 12 | 13 | public void configurarCanais() { 14 | System.out.println("Canais configurados"); 15 | } 16 | 17 | public void reproduzirAudio(String arquivo) { 18 | System.out.println("Reproduzindo: " + arquivo); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/br/padroes/facade/SistemaDeInput.java: -------------------------------------------------------------------------------- 1 | package br.padroes.facade; 2 | 3 | public class SistemaDeInput { 4 | public void configurarTeclado() { 5 | System.out.println("Teclado configurado"); 6 | } 7 | 8 | public void configurarJoystick() { 9 | System.out.println("Joystick configurado"); 10 | } 11 | 12 | public void lerInput() { 13 | System.out.println("Botão # pressionada"); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/br/padroes/facade/SistemaDeVideo.java: -------------------------------------------------------------------------------- 1 | package br.padroes.facade; 2 | 3 | public class SistemaDeVideo { 4 | public void configurarResolucao() { 5 | System.out.println("Resolução configurada"); 6 | } 7 | 8 | public void configurarCores() { 9 | System.out.println("Esquema de cores configurado"); 10 | } 11 | 12 | public void renderizarImagem(String imagem) { 13 | System.out.println("Imagem: " + imagem + " renderizada"); 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /src/br/padroes/facade/SistemasFacade.java: -------------------------------------------------------------------------------- 1 | package br.padroes.facade; 2 | 3 | public class SistemasFacade { 4 | protected SistemaDeAudio audio; 5 | protected SistemaDeInput input; 6 | protected SistemaDeVideo video; 7 | 8 | public void inicializarSubsistemas() { 9 | video = new SistemaDeVideo(); 10 | video.configurarCores(); 11 | video.configurarResolucao(); 12 | 13 | input = new SistemaDeInput(); 14 | input.configurarJoystick(); 15 | input.configurarTeclado(); 16 | 17 | audio = new SistemaDeAudio(); 18 | audio.configurarCanais(); 19 | audio.configurarFrequencia(); 20 | audio.configurarVolume(); 21 | } 22 | 23 | public void reproduzirAudio(String arquivo) { 24 | audio.reproduzirAudio(arquivo); 25 | } 26 | 27 | public void renderizarImagem(String imagem) { 28 | video.renderizarImagem(imagem); 29 | } 30 | 31 | public void lerInput() { 32 | input.lerInput(); 33 | } 34 | 35 | } 36 | -------------------------------------------------------------------------------- /src/br/padroes/factoryMethod/Carro.java: -------------------------------------------------------------------------------- 1 | package br.padroes.factoryMethod; 2 | 3 | public interface Carro { 4 | void exibirInfo(); 5 | } 6 | -------------------------------------------------------------------------------- /src/br/padroes/factoryMethod/Celta.java: -------------------------------------------------------------------------------- 1 | package br.padroes.factoryMethod; 2 | 3 | public class Celta implements Carro { 4 | 5 | @Override 6 | public void exibirInfo() { 7 | System.out.println("Modelo: Celta\nFabricante: Chevrolet"); 8 | } 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/br/padroes/factoryMethod/Cliente.java: -------------------------------------------------------------------------------- 1 | package br.padroes.factoryMethod; 2 | 3 | public class Cliente { 4 | public static void main(String[] args) { 5 | FabricaDeCarro fabrica = new FabricaFiat(); 6 | Carro carro = fabrica.criarCarro(); 7 | carro.exibirInfo(); 8 | System.out.println(); 9 | 10 | fabrica = new FabricaWolks(); 11 | carro = fabrica.criarCarro(); 12 | carro.exibirInfo(); 13 | System.out.println(); 14 | 15 | fabrica = new FabricaFord(); 16 | carro = fabrica.criarCarro(); 17 | carro.exibirInfo(); 18 | System.out.println(); 19 | 20 | fabrica = new FabricaChevrolet(); 21 | carro = fabrica.criarCarro(); 22 | carro.exibirInfo(); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/br/padroes/factoryMethod/FabricaChevrolet.java: -------------------------------------------------------------------------------- 1 | package br.padroes.factoryMethod; 2 | 3 | public class FabricaChevrolet implements FabricaDeCarro { 4 | 5 | @Override 6 | public Carro criarCarro() { 7 | return new Celta(); 8 | } 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/br/padroes/factoryMethod/FabricaDeCarro.java: -------------------------------------------------------------------------------- 1 | package br.padroes.factoryMethod; 2 | 3 | public interface FabricaDeCarro { 4 | Carro criarCarro(); 5 | } 6 | -------------------------------------------------------------------------------- /src/br/padroes/factoryMethod/FabricaFiat.java: -------------------------------------------------------------------------------- 1 | package br.padroes.factoryMethod; 2 | 3 | public class FabricaFiat implements FabricaDeCarro { 4 | 5 | @Override 6 | public Carro criarCarro() { 7 | return new Palio(); 8 | } 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/br/padroes/factoryMethod/FabricaFord.java: -------------------------------------------------------------------------------- 1 | package br.padroes.factoryMethod; 2 | 3 | public class FabricaFord implements FabricaDeCarro { 4 | 5 | @Override 6 | public Carro criarCarro() { 7 | return new Fiesta(); 8 | } 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/br/padroes/factoryMethod/FabricaWolks.java: -------------------------------------------------------------------------------- 1 | package br.padroes.factoryMethod; 2 | 3 | public class FabricaWolks implements FabricaDeCarro { 4 | 5 | @Override 6 | public Carro criarCarro() { 7 | return new Gol(); 8 | } 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/br/padroes/factoryMethod/Fiesta.java: -------------------------------------------------------------------------------- 1 | package br.padroes.factoryMethod; 2 | 3 | public class Fiesta implements Carro { 4 | 5 | @Override 6 | public void exibirInfo() { 7 | System.out.println("Modelo: Fiesta\nFabricante: Ford"); 8 | } 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/br/padroes/factoryMethod/Gol.java: -------------------------------------------------------------------------------- 1 | package br.padroes.factoryMethod; 2 | 3 | public class Gol implements Carro { 4 | 5 | @Override 6 | public void exibirInfo() { 7 | System.out.println("Modelo: Gol\nFabricante: Volkswagen"); 8 | } 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/br/padroes/factoryMethod/Palio.java: -------------------------------------------------------------------------------- 1 | package br.padroes.factoryMethod; 2 | 3 | public class Palio implements Carro { 4 | 5 | @Override 6 | public void exibirInfo() { 7 | System.out.println("Modelo: Palio\nFabricante: Fiat"); 8 | } 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/br/padroes/flyweight/Cliente.java: -------------------------------------------------------------------------------- 1 | package br.padroes.flyweight; 2 | 3 | import br.padroes.flyweight.FlyweightFactory.Sprites; 4 | 5 | public class Cliente { 6 | public static void main(String[] args) { 7 | FlyweightFactory factory = new FlyweightFactory(); 8 | 9 | factory.getFlyweight(Sprites.CENARIO_1).desenharImagem(new Ponto(0, 0)); 10 | 11 | factory.getFlyweight(Sprites.JOGADOR).desenharImagem(new Ponto(10, 10)); 12 | 13 | factory.getFlyweight(Sprites.INIMIGO_1).desenharImagem( 14 | new Ponto(100, 10)); 15 | factory.getFlyweight(Sprites.INIMIGO_1).desenharImagem( 16 | new Ponto(120, 10)); 17 | factory.getFlyweight(Sprites.INIMIGO_1).desenharImagem( 18 | new Ponto(140, 10)); 19 | 20 | factory.getFlyweight(Sprites.INIMIGO_2).desenharImagem( 21 | new Ponto(60, 10)); 22 | factory.getFlyweight(Sprites.INIMIGO_2).desenharImagem( 23 | new Ponto(50, 10)); 24 | 25 | factory.getFlyweight(Sprites.INIMIGO_3).desenharImagem( 26 | new Ponto(170, 10)); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/br/padroes/flyweight/FlyweightFactory.java: -------------------------------------------------------------------------------- 1 | package br.padroes.flyweight; 2 | 3 | import java.util.ArrayList; 4 | 5 | public class FlyweightFactory { 6 | 7 | protected ArrayList flyweights; 8 | 9 | public enum Sprites { 10 | JOGADOR, INIMIGO_1, INIMIGO_2, INIMIGO_3, CENARIO_1, CENARIO_2 11 | } 12 | 13 | public FlyweightFactory() { 14 | flyweights = new ArrayList(); 15 | flyweights.add(new Sprite("jogador.png")); 16 | flyweights.add(new Sprite("inimigo1.png")); 17 | flyweights.add(new Sprite("inimigo2.png")); 18 | flyweights.add(new Sprite("inimigo3.png")); 19 | flyweights.add(new Sprite("cenario1.png")); 20 | flyweights.add(new Sprite("cenario2.png")); 21 | } 22 | 23 | public SpriteFlyweight getFlyweight(Sprites jogador) { 24 | switch (jogador) { 25 | case JOGADOR: 26 | return flyweights.get(0); 27 | case INIMIGO_1: 28 | return flyweights.get(1); 29 | case INIMIGO_2: 30 | return flyweights.get(2); 31 | case INIMIGO_3: 32 | return flyweights.get(3); 33 | case CENARIO_1: 34 | return flyweights.get(4); 35 | default: 36 | return flyweights.get(5); 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /src/br/padroes/flyweight/Imagem.java: -------------------------------------------------------------------------------- 1 | package br.padroes.flyweight; 2 | 3 | //Estado extrínseco 4 | public class Imagem { 5 | protected String nomeDaImagem; 6 | 7 | public Imagem(String imagem) { 8 | nomeDaImagem = imagem; 9 | } 10 | 11 | public void desenharImagem() { 12 | System.out.println(nomeDaImagem + " desenhada!"); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/br/padroes/flyweight/Ponto.java: -------------------------------------------------------------------------------- 1 | package br.padroes.flyweight; 2 | 3 | // Contexto de desenho da imagem 4 | public class Ponto { 5 | public int x, y; 6 | 7 | public Ponto(int x, int y) { 8 | this.x = x; 9 | this.y = y; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/br/padroes/flyweight/Sprite.java: -------------------------------------------------------------------------------- 1 | package br.padroes.flyweight; 2 | 3 | // O Flyweight concreto 4 | public class Sprite extends SpriteFlyweight { 5 | protected Imagem imagem; 6 | 7 | public Sprite(String nomeDaImagem) { 8 | imagem = new Imagem(nomeDaImagem); 9 | } 10 | 11 | @Override 12 | public void desenharImagem(Ponto ponto) { 13 | imagem.desenharImagem(); 14 | System.out.println("No ponto (" + ponto.x + "," + ponto.y + ")!"); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/br/padroes/flyweight/SpriteFlyweight.java: -------------------------------------------------------------------------------- 1 | package br.padroes.flyweight; 2 | 3 | public abstract class SpriteFlyweight { 4 | public abstract void desenharImagem(Ponto ponto); 5 | } 6 | -------------------------------------------------------------------------------- /src/br/padroes/interpreter/Cliente.java: -------------------------------------------------------------------------------- 1 | package br.padroes.interpreter; 2 | 3 | import java.util.ArrayList; 4 | 5 | public class Cliente { 6 | public static void main(String[] args) { 7 | ArrayList interpretadores = new ArrayList(); 8 | interpretadores.add(new QuatroDigitosRomano()); 9 | interpretadores.add(new TresDigitosRomano()); 10 | interpretadores.add(new DoisDigitosRomano()); 11 | interpretadores.add(new UmDigitoRomano()); 12 | 13 | String numeroRomano = "CXCIV"; 14 | Contexto contexto = new Contexto(numeroRomano); 15 | for (NumeroRomanoInterpreter numeroRomanoInterpreter : interpretadores) { 16 | numeroRomanoInterpreter.interpretar(contexto); 17 | } 18 | 19 | System.out.println(numeroRomano + " = " 20 | + Integer.toString(contexto.getOutput())); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/br/padroes/interpreter/Contexto.java: -------------------------------------------------------------------------------- 1 | package br.padroes.interpreter; 2 | 3 | public class Contexto { 4 | protected String input; 5 | protected int output; 6 | 7 | public Contexto(String input) { 8 | this.input = input; 9 | } 10 | 11 | public String getInput() { 12 | return input; 13 | } 14 | 15 | public void setInput(String input) { 16 | this.input = input; 17 | } 18 | 19 | public int getOutput() { 20 | return output; 21 | } 22 | 23 | public void setOutput(int output) { 24 | this.output = output; 25 | } 26 | 27 | } 28 | -------------------------------------------------------------------------------- /src/br/padroes/interpreter/DoisDigitosRomano.java: -------------------------------------------------------------------------------- 1 | package br.padroes.interpreter; 2 | 3 | public class DoisDigitosRomano extends NumeroRomanoInterpreter { 4 | 5 | @Override 6 | public String um() { 7 | return "X"; 8 | } 9 | 10 | @Override 11 | public String quatro() { 12 | return "XL"; 13 | } 14 | 15 | @Override 16 | public String cinco() { 17 | return "L"; 18 | } 19 | 20 | @Override 21 | public String nove() { 22 | return "XC"; 23 | } 24 | 25 | @Override 26 | public int multiplicador() { 27 | return 10; 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /src/br/padroes/interpreter/NumeroRomanoInterpreter.java: -------------------------------------------------------------------------------- 1 | package br.padroes.interpreter; 2 | 3 | public abstract class NumeroRomanoInterpreter { 4 | public void interpretar(Contexto contexto) { 5 | if (contexto.getInput().length() == 0) { 6 | return; 7 | } 8 | // Os valores nove e quatro são os únicos que possuem duas casas 9 | // Ex: IV, IX 10 | if (contexto.getInput().startsWith(nove())) { 11 | adicionarValorOutput(contexto, 9); 12 | consumirDuasCasasDoInput(contexto); 13 | } else if (contexto.getInput().startsWith(quatro())) { 14 | adicionarValorOutput(contexto, 4); 15 | consumirDuasCasasDoInput(contexto); 16 | } else if (contexto.getInput().startsWith(cinco())) { 17 | adicionarValorOutput(contexto, 5); 18 | consumirUmaCasaInput(contexto); 19 | } 20 | // Os valores de um são os únicos que repetem, ex: III, CCC, MMM 21 | while (contexto.getInput().startsWith(um())) { 22 | adicionarValorOutput(contexto, 1); 23 | consumirUmaCasaInput(contexto); 24 | } 25 | } 26 | 27 | private void consumirUmaCasaInput(Contexto contexto) { 28 | contexto.setInput(contexto.getInput().substring(1)); 29 | } 30 | 31 | private void consumirDuasCasasDoInput(Contexto contexto) { 32 | contexto.setInput(contexto.getInput().substring(2)); 33 | } 34 | 35 | private void adicionarValorOutput(Contexto contexto, int numero) { 36 | contexto.setOutput(contexto.getOutput() + (numero * multiplicador())); 37 | } 38 | 39 | public abstract String um(); 40 | 41 | public abstract String quatro(); 42 | 43 | public abstract String cinco(); 44 | 45 | public abstract String nove(); 46 | 47 | public abstract int multiplicador(); 48 | } 49 | -------------------------------------------------------------------------------- /src/br/padroes/interpreter/QuatroDigitosRomano.java: -------------------------------------------------------------------------------- 1 | package br.padroes.interpreter; 2 | 3 | public class QuatroDigitosRomano extends NumeroRomanoInterpreter { 4 | 5 | @Override 6 | public String um() { 7 | return "M"; 8 | } 9 | 10 | @Override 11 | public String quatro() { 12 | return " "; 13 | } 14 | 15 | @Override 16 | public String cinco() { 17 | return " "; 18 | } 19 | 20 | @Override 21 | public String nove() { 22 | return " "; 23 | } 24 | 25 | @Override 26 | public int multiplicador() { 27 | return 1000; 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /src/br/padroes/interpreter/TresDigitosRomano.java: -------------------------------------------------------------------------------- 1 | package br.padroes.interpreter; 2 | 3 | public class TresDigitosRomano extends NumeroRomanoInterpreter { 4 | 5 | @Override 6 | public String um() { 7 | return "C"; 8 | } 9 | 10 | @Override 11 | public String quatro() { 12 | return "CD"; 13 | } 14 | 15 | @Override 16 | public String cinco() { 17 | return "D"; 18 | } 19 | 20 | @Override 21 | public String nove() { 22 | return "CM"; 23 | } 24 | 25 | @Override 26 | public int multiplicador() { 27 | return 100; 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /src/br/padroes/interpreter/UmDigitoRomano.java: -------------------------------------------------------------------------------- 1 | package br.padroes.interpreter; 2 | 3 | public class UmDigitoRomano extends NumeroRomanoInterpreter { 4 | 5 | @Override 6 | public String um() { 7 | return "I"; 8 | } 9 | 10 | @Override 11 | public String quatro() { 12 | return "IV"; 13 | } 14 | 15 | @Override 16 | public String cinco() { 17 | return "V"; 18 | } 19 | 20 | @Override 21 | public String nove() { 22 | return "IX"; 23 | } 24 | 25 | @Override 26 | public int multiplicador() { 27 | return 1; 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /src/br/padroes/iterator/AgregadoDeCanais.java: -------------------------------------------------------------------------------- 1 | package br.padroes.iterator; 2 | 3 | import java.util.ArrayList; 4 | 5 | public abstract class AgregadoDeCanais { 6 | protected ArrayList canais; 7 | 8 | public AgregadoDeCanais() { 9 | canais = new ArrayList(); 10 | } 11 | 12 | public int count() { 13 | return canais.size(); 14 | } 15 | 16 | public IteradorCanais criarIterator() { 17 | return new IteradorCanais(canais); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/br/padroes/iterator/CanaisEsportes.java: -------------------------------------------------------------------------------- 1 | package br.padroes.iterator; 2 | 3 | public class CanaisEsportes extends AgregadoDeCanais { 4 | public CanaisEsportes() { 5 | canais.add(new Canal("Esporte ao vivo")); 6 | canais.add(new Canal("Basquete 2011")); 7 | canais.add(new Canal("Campeonato Italiano")); 8 | canais.add(new Canal("Campeonato Espanhol")); 9 | canais.add(new Canal("Campeonato Brasileiro")); 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /src/br/padroes/iterator/Canal.java: -------------------------------------------------------------------------------- 1 | package br.padroes.iterator; 2 | 3 | public class Canal { 4 | String nome; 5 | 6 | public Canal(String nome) { 7 | this.nome = nome; 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/br/padroes/iterator/IteradorCanais.java: -------------------------------------------------------------------------------- 1 | package br.padroes.iterator; 2 | 3 | import java.util.ArrayList; 4 | 5 | public class IteradorCanais { 6 | 7 | ArrayList lista; 8 | int contador; 9 | 10 | protected IteradorCanais(ArrayList lista) { 11 | this.lista = lista; 12 | contador = 0; 13 | } 14 | 15 | public void first() { 16 | contador = 0; 17 | } 18 | 19 | public void proximoCanal() { 20 | contador++; 21 | } 22 | 23 | public void voltarCanal() { 24 | contador--; 25 | } 26 | 27 | public boolean isDone() { 28 | return contador == lista.size(); 29 | } 30 | 31 | private Canal currentItem() { 32 | if (isDone()) { 33 | contador = lista.size() - 1; 34 | } else if (contador < 0) { 35 | contador = 0; 36 | } 37 | return lista.get(contador); 38 | } 39 | 40 | public String getNomeCanal() { 41 | return currentItem().nome; 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /src/br/padroes/iterator/Main.java: -------------------------------------------------------------------------------- 1 | package br.padroes.iterator; 2 | 3 | public class Main { 4 | public static void main(String[] args) { 5 | CanaisEsportes meusCanais = new CanaisEsportes(); 6 | System.out.println("Iterando com for:"); 7 | for (IteradorCanais it = meusCanais.criarIterator(); !it.isDone(); it 8 | .proximoCanal()) { 9 | System.out.println(it.getNomeCanal()); 10 | } 11 | 12 | System.out.println("\nIterando manualmente:"); 13 | IteradorCanais it = meusCanais.criarIterator(); 14 | System.out.println(it.getNomeCanal()); 15 | it.proximoCanal(); 16 | System.out.println(it.getNomeCanal()); 17 | it.proximoCanal(); 18 | System.out.println(it.getNomeCanal()); 19 | it.proximoCanal(); 20 | System.out.println(it.getNomeCanal()); 21 | it.proximoCanal(); 22 | System.out.println(it.getNomeCanal()); 23 | 24 | System.out.println("\nIterando fora dos limites:"); 25 | it.proximoCanal(); 26 | System.out.println(it.getNomeCanal()); 27 | it.first(); 28 | it.voltarCanal(); 29 | System.out.println(it.getNomeCanal()); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/br/padroes/iteratorExterno/AgregadoDeCanais.java: -------------------------------------------------------------------------------- 1 | package br.padroes.iteratorExterno; 2 | 3 | public interface AgregadoDeCanais { 4 | IteradorInterface criarIterator(); 5 | } -------------------------------------------------------------------------------- /src/br/padroes/iteratorExterno/CanaisEsportes.java: -------------------------------------------------------------------------------- 1 | package br.padroes.iteratorExterno; 2 | 3 | import java.util.ArrayList; 4 | 5 | public class CanaisEsportes implements AgregadoDeCanais { 6 | 7 | protected ArrayList canais; 8 | 9 | public CanaisEsportes() { 10 | canais = new ArrayList(); 11 | canais.add(new Canal("Esporte ao vivo")); 12 | canais.add(new Canal("Basquete 2011")); 13 | canais.add(new Canal("Campeonato Italiano")); 14 | canais.add(new Canal("Campeonato Espanhol")); 15 | canais.add(new Canal("Campeonato Brasileiro")); 16 | } 17 | 18 | @Override 19 | public IteradorListaDeCanais criarIterator() { 20 | return new IteradorListaDeCanais(canais); 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /src/br/padroes/iteratorExterno/CanaisFilmes.java: -------------------------------------------------------------------------------- 1 | package br.padroes.iteratorExterno; 2 | 3 | public class CanaisFilmes implements AgregadoDeCanais { 4 | 5 | protected Canal[] canais; 6 | 7 | public CanaisFilmes() { 8 | canais = new Canal[4]; 9 | canais[0] = new Canal("Cinemax"); 10 | canais[1] = new Canal("HBO"); 11 | canais[2] = new Canal("FOX"); 12 | canais[3] = new Canal("Sony"); 13 | } 14 | 15 | @Override 16 | public IteradorInterface criarIterator() { 17 | return new IteradorMatrizDeCanais(canais); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/br/padroes/iteratorExterno/Canal.java: -------------------------------------------------------------------------------- 1 | package br.padroes.iteratorExterno; 2 | 3 | public class Canal { 4 | public String nome; 5 | 6 | public Canal(String nome) { 7 | this.nome = nome; 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/br/padroes/iteratorExterno/IteradorInterface.java: -------------------------------------------------------------------------------- 1 | package br.padroes.iteratorExterno; 2 | 3 | public interface IteradorInterface { 4 | void first(); 5 | 6 | void next(); 7 | 8 | boolean isDone(); 9 | 10 | Canal currentItem(); 11 | } 12 | -------------------------------------------------------------------------------- /src/br/padroes/iteratorExterno/IteradorListaDeCanais.java: -------------------------------------------------------------------------------- 1 | package br.padroes.iteratorExterno; 2 | 3 | import java.util.ArrayList; 4 | 5 | public class IteradorListaDeCanais implements IteradorInterface { 6 | 7 | protected ArrayList lista; 8 | protected int contador; 9 | 10 | protected IteradorListaDeCanais(ArrayList lista) { 11 | this.lista = lista; 12 | contador = 0; 13 | } 14 | 15 | public void first() { 16 | contador = 0; 17 | } 18 | 19 | public void next() { 20 | contador++; 21 | } 22 | 23 | public boolean isDone() { 24 | return contador == lista.size(); 25 | } 26 | 27 | public Canal currentItem() { 28 | if (isDone()) { 29 | contador = lista.size() - 1; 30 | } else if (contador < 0) { 31 | contador = 0; 32 | } 33 | return lista.get(contador); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/br/padroes/iteratorExterno/IteradorMatrizDeCanais.java: -------------------------------------------------------------------------------- 1 | package br.padroes.iteratorExterno; 2 | 3 | public class IteradorMatrizDeCanais implements IteradorInterface { 4 | protected Canal[] lista; 5 | protected int contador; 6 | 7 | public IteradorMatrizDeCanais(Canal[] lista) { 8 | this.lista = lista; 9 | } 10 | 11 | @Override 12 | public void first() { 13 | contador = 0; 14 | } 15 | 16 | @Override 17 | public void next() { 18 | contador++; 19 | } 20 | 21 | @Override 22 | public boolean isDone() { 23 | return contador == lista.length; 24 | } 25 | 26 | @Override 27 | public Canal currentItem() { 28 | if (isDone()) { 29 | contador = lista.length - 1; 30 | } else if (contador < 0) { 31 | contador = 0; 32 | } 33 | return lista[contador]; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/br/padroes/iteratorExterno/Main.java: -------------------------------------------------------------------------------- 1 | package br.padroes.iteratorExterno; 2 | 3 | public class Main { 4 | public static void main(String[] args) { 5 | AgregadoDeCanais canaisDeEsportes = new CanaisEsportes(); 6 | System.out.println("Canais de Esporte:"); 7 | for (IteradorInterface it = canaisDeEsportes.criarIterator(); !it 8 | .isDone(); it.next()) { 9 | System.out.println(it.currentItem().nome); 10 | } 11 | 12 | AgregadoDeCanais canaisDeFilmes = new CanaisFilmes(); 13 | System.out.println("\nCanais de Filmes:"); 14 | for (IteradorInterface it = canaisDeFilmes.criarIterator(); !it 15 | .isDone(); it.next()) { 16 | System.out.println(it.currentItem().nome); 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/br/padroes/iteratorInterno/IteradorInterno.java: -------------------------------------------------------------------------------- 1 | package br.padroes.iteratorInterno; 2 | 3 | import br.padroes.iteratorExterno.Canal; 4 | import br.padroes.iteratorExterno.IteradorInterface; 5 | 6 | public abstract class IteradorInterno { 7 | 8 | IteradorInterface it; 9 | 10 | public void percorrerLista() { 11 | for (it.first(); !it.isDone(); it.next()) { 12 | operacao(it.currentItem()); 13 | } 14 | } 15 | 16 | protected abstract void operacao(Canal canal); 17 | } 18 | -------------------------------------------------------------------------------- /src/br/padroes/iteratorInterno/IteradorPrint.java: -------------------------------------------------------------------------------- 1 | package br.padroes.iteratorInterno; 2 | 3 | import br.padroes.iteratorExterno.Canal; 4 | import br.padroes.iteratorExterno.IteradorInterface; 5 | 6 | public class IteradorPrint extends IteradorInterno { 7 | 8 | public IteradorPrint(IteradorInterface it) { 9 | this.it = it; 10 | } 11 | 12 | @Override 13 | protected void operacao(Canal canal) { 14 | System.out.println(canal.nome); 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /src/br/padroes/iteratorInterno/Main.java: -------------------------------------------------------------------------------- 1 | package br.padroes.iteratorInterno; 2 | 3 | import br.padroes.iteratorExterno.AgregadoDeCanais; 4 | import br.padroes.iteratorExterno.CanaisEsportes; 5 | import br.padroes.iteratorExterno.CanaisFilmes; 6 | 7 | public class Main { 8 | public static void main(String[] args) { 9 | AgregadoDeCanais canaisDeEsportes = new CanaisEsportes(); 10 | System.out.println("Canais de Esporte:"); 11 | IteradorInterno it = new IteradorPrint(canaisDeEsportes.criarIterator()); 12 | it.percorrerLista(); 13 | 14 | AgregadoDeCanais canaisDeFilmes = new CanaisFilmes(); 15 | System.out.println("\nCanais de Filmes:"); 16 | it = new IteradorPrint(canaisDeFilmes.criarIterator()); 17 | it.percorrerLista(); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/br/padroes/mediator/AndroidColleague.java: -------------------------------------------------------------------------------- 1 | package br.padroes.mediator; 2 | 3 | public class AndroidColleague extends Colleague { 4 | 5 | public AndroidColleague(Mediator m) { 6 | super(m); 7 | } 8 | 9 | @Override 10 | public void receberMensagem(String mensagem) { 11 | System.out.println("Android recebeu: " + mensagem); 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /src/br/padroes/mediator/Cliente.java: -------------------------------------------------------------------------------- 1 | package br.padroes.mediator; 2 | 3 | public class Cliente { 4 | public static void main(String[] args) { 5 | MensagemMediator mediador = new MensagemMediator(); 6 | 7 | AndroidColleague android = new AndroidColleague(mediador); 8 | IOSColleague ios = new IOSColleague(mediador); 9 | SymbianColleague symbian = new SymbianColleague(mediador); 10 | 11 | mediador.adicionarColleague(android); 12 | mediador.adicionarColleague(ios); 13 | mediador.adicionarColleague(symbian); 14 | 15 | symbian.enviarMensagem("Oi, eu sou um Symbian!"); 16 | System.out.println("========="); 17 | android.enviarMensagem("Oi Symbian! Eu sou um Android!"); 18 | System.out.println("========="); 19 | ios.enviarMensagem("Olá todos, sou um iOs!"); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/br/padroes/mediator/Colleague.java: -------------------------------------------------------------------------------- 1 | package br.padroes.mediator; 2 | 3 | public abstract class Colleague { 4 | protected Mediator mediator; 5 | 6 | public Colleague(Mediator m) { 7 | mediator = m; 8 | } 9 | 10 | public void enviarMensagem(String mensagem) { 11 | mediator.enviar(mensagem, this); 12 | } 13 | 14 | public abstract void receberMensagem(String mensagem); 15 | } 16 | -------------------------------------------------------------------------------- /src/br/padroes/mediator/IOSColleague.java: -------------------------------------------------------------------------------- 1 | package br.padroes.mediator; 2 | 3 | public class IOSColleague extends Colleague { 4 | 5 | public IOSColleague(Mediator m) { 6 | super(m); 7 | } 8 | 9 | @Override 10 | public void receberMensagem(String mensagem) { 11 | System.out.println("iOs recebeu: " + mensagem); 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /src/br/padroes/mediator/Mediator.java: -------------------------------------------------------------------------------- 1 | package br.padroes.mediator; 2 | 3 | public interface Mediator { 4 | 5 | void enviar(String mensagem, Colleague colleague); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/br/padroes/mediator/MensagemMediator.java: -------------------------------------------------------------------------------- 1 | package br.padroes.mediator; 2 | 3 | import java.util.ArrayList; 4 | 5 | public class MensagemMediator implements Mediator { 6 | 7 | protected ArrayList contatos; 8 | 9 | public MensagemMediator() { 10 | contatos = new ArrayList(); 11 | } 12 | 13 | public void adicionarColleague(Colleague colleague) { 14 | contatos.add(colleague); 15 | } 16 | 17 | @Override 18 | public void enviar(String mensagem, Colleague colleague) { 19 | for (Colleague contato : contatos) { 20 | if (contato != colleague) { 21 | definirProtocolo(contato); 22 | contato.receberMensagem(mensagem); 23 | } 24 | } 25 | } 26 | 27 | private void definirProtocolo(Colleague contato) { 28 | if (contato instanceof IOSColleague) { 29 | System.out.println("Protocolo iOS"); 30 | } else if (contato instanceof AndroidColleague) { 31 | System.out.println("Protocolo Android"); 32 | } else if (contato instanceof SymbianColleague) { 33 | System.out.println("Protocolo Symbian"); 34 | } 35 | } 36 | 37 | } 38 | -------------------------------------------------------------------------------- /src/br/padroes/mediator/SymbianColleague.java: -------------------------------------------------------------------------------- 1 | package br.padroes.mediator; 2 | 3 | public class SymbianColleague extends Colleague { 4 | 5 | public SymbianColleague(Mediator m) { 6 | super(m); 7 | } 8 | 9 | @Override 10 | public void receberMensagem(String mensagem) { 11 | System.out.println("Symbian recebeu: " + mensagem); 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /src/br/padroes/memento/Cliente.java: -------------------------------------------------------------------------------- 1 | package br.padroes.memento; 2 | 3 | public class Cliente { 4 | public static void main(String[] args) { 5 | Texto texto = new Texto(); 6 | texto.escreverTexto("Primeira linha do texto\n"); 7 | texto.escreverTexto("Segunda linha do texto\n"); 8 | texto.escreverTexto("Terceira linha do texto\n"); 9 | texto.mostrarTexto(); 10 | texto.desfazerEscrita(); 11 | texto.mostrarTexto(); 12 | texto.desfazerEscrita(); 13 | texto.mostrarTexto(); 14 | texto.desfazerEscrita(); 15 | texto.mostrarTexto(); 16 | texto.desfazerEscrita(); 17 | texto.mostrarTexto(); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/br/padroes/memento/Texto.java: -------------------------------------------------------------------------------- 1 | package br.padroes.memento; 2 | 3 | public class Texto { 4 | protected String texto; 5 | TextoCareTaker caretaker; 6 | 7 | public Texto() { 8 | caretaker = new TextoCareTaker(); 9 | texto = new String(); 10 | } 11 | 12 | public void escreverTexto(String novoTexto) { 13 | caretaker.adicionarMemento(new TextoMemento(texto)); 14 | texto += novoTexto; 15 | } 16 | 17 | public void desfazerEscrita() { 18 | texto = caretaker.getUltimoEstadoSalvo().getTextoSalvo(); 19 | } 20 | 21 | public void mostrarTexto() { 22 | System.out.println(texto); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/br/padroes/memento/TextoCareTaker.java: -------------------------------------------------------------------------------- 1 | package br.padroes.memento; 2 | 3 | import java.util.ArrayList; 4 | 5 | public class TextoCareTaker { 6 | protected ArrayList estados; 7 | 8 | public TextoCareTaker() { 9 | estados = new ArrayList(); 10 | } 11 | 12 | public void adicionarMemento(TextoMemento memento) { 13 | estados.add(memento); 14 | } 15 | 16 | public TextoMemento getUltimoEstadoSalvo() { 17 | if (estados.size() <= 0) { 18 | return new TextoMemento(""); 19 | } 20 | TextoMemento estadoSalvo = estados.get(estados.size() - 1); 21 | estados.remove(estados.size() - 1); 22 | return estadoSalvo; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/br/padroes/memento/TextoMemento.java: -------------------------------------------------------------------------------- 1 | package br.padroes.memento; 2 | 3 | public class TextoMemento { 4 | protected String estadoTexto; 5 | 6 | public TextoMemento(String texto) { 7 | estadoTexto = texto; 8 | } 9 | 10 | public String getTextoSalvo() { 11 | return estadoTexto; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/br/padroes/observer/BarraObserver.java: -------------------------------------------------------------------------------- 1 | package br.padroes.observer; 2 | 3 | public class BarraObserver extends DadosObserver { 4 | 5 | public BarraObserver(DadosSubject dados) { 6 | super(dados); 7 | } 8 | 9 | @Override 10 | public void update() { 11 | String barraA = "", barraB = "", barraC = ""; 12 | 13 | for (int i = 0; i < dados.getState().valorA; i++) { 14 | barraA += '='; 15 | } 16 | 17 | for (int i = 0; i < dados.getState().valorB; i++) { 18 | barraB += '='; 19 | } 20 | 21 | for (int i = 0; i < dados.getState().valorC; i++) { 22 | barraC += '='; 23 | } 24 | 25 | System.out.println("Barras:\n Valor A: " + barraA + "\nValor B: " 26 | + barraB + "\nValor C: " + barraC); 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /src/br/padroes/observer/Cliente.java: -------------------------------------------------------------------------------- 1 | package br.padroes.observer; 2 | 3 | public class Cliente { 4 | public static void main(String[] args) { 5 | DadosSubject dados = new DadosSubject(); 6 | dados.attach(new TabelaObserver(dados)); 7 | dados.attach(new BarraObserver(dados)); 8 | dados.attach(new PorcentoObserver(dados)); 9 | 10 | dados.setState(new Dados(7, 3, 1)); 11 | dados.setState(new Dados(2, 3, 1)); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/br/padroes/observer/Dados.java: -------------------------------------------------------------------------------- 1 | package br.padroes.observer; 2 | 3 | public class Dados { 4 | int valorA, valorB, valorC; 5 | 6 | public Dados(int a, int b, int c) { 7 | valorA = a; 8 | valorB = b; 9 | valorC = c; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/br/padroes/observer/DadosObserver.java: -------------------------------------------------------------------------------- 1 | package br.padroes.observer; 2 | 3 | public abstract class DadosObserver { 4 | 5 | protected DadosSubject dados; 6 | 7 | public DadosObserver(DadosSubject dados) { 8 | this.dados = dados; 9 | } 10 | 11 | public abstract void update(); 12 | } -------------------------------------------------------------------------------- /src/br/padroes/observer/DadosSubject.java: -------------------------------------------------------------------------------- 1 | package br.padroes.observer; 2 | 3 | import java.util.ArrayList; 4 | 5 | public class DadosSubject { 6 | 7 | protected ArrayList observers; 8 | protected Dados dados; 9 | 10 | public DadosSubject() { 11 | observers = new ArrayList(); 12 | } 13 | 14 | public void attach(DadosObserver observer) { 15 | observers.add(observer); 16 | } 17 | 18 | public void detach(int indice) { 19 | observers.remove(indice); 20 | } 21 | 22 | public void setState(Dados dados) { 23 | this.dados = dados; 24 | notifyObservers(); 25 | } 26 | 27 | private void notifyObservers() { 28 | for (DadosObserver observer : observers) { 29 | observer.update(); 30 | } 31 | } 32 | 33 | public Dados getState() { 34 | return dados; 35 | } 36 | 37 | } 38 | -------------------------------------------------------------------------------- /src/br/padroes/observer/PorcentoObserver.java: -------------------------------------------------------------------------------- 1 | package br.padroes.observer; 2 | 3 | import java.text.DecimalFormat; 4 | 5 | public class PorcentoObserver extends DadosObserver { 6 | 7 | public PorcentoObserver(DadosSubject dados) { 8 | super(dados); 9 | } 10 | 11 | @Override 12 | public void update() { 13 | int somaDosValores = dados.getState().valorA + dados.getState().valorB 14 | + dados.getState().valorC; 15 | DecimalFormat formatador = new DecimalFormat("#.##"); 16 | String porcentagemA = formatador.format((double) dados.getState().valorA 17 | / somaDosValores); 18 | String porcentagemB = formatador.format((double) dados.getState().valorB 19 | / somaDosValores); 20 | String porcentagemC = formatador.format((double) dados.getState().valorC 21 | / somaDosValores); 22 | System.out.println("Porcentagem:\nValor A: " + porcentagemA 23 | + "%\nValor B: " + porcentagemB + "%\nValor C: " + porcentagemC 24 | + "%"); 25 | } 26 | 27 | } 28 | -------------------------------------------------------------------------------- /src/br/padroes/observer/TabelaObserver.java: -------------------------------------------------------------------------------- 1 | package br.padroes.observer; 2 | 3 | public class TabelaObserver extends DadosObserver { 4 | 5 | public TabelaObserver(DadosSubject dados) { 6 | super(dados); 7 | } 8 | 9 | @Override 10 | public void update() { 11 | System.out.println("Tabela:\nValor A: " + dados.getState().valorA 12 | + "\nValor B: " + dados.getState().valorB + "\nValor C: " 13 | + dados.getState().valorC); 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /src/br/padroes/prototype/CarroPrototype.java: -------------------------------------------------------------------------------- 1 | package br.padroes.prototype; 2 | 3 | public abstract class CarroPrototype { 4 | protected double valorCompra; 5 | 6 | public abstract String exibirInfo(); 7 | 8 | public abstract CarroPrototype clonar(); 9 | 10 | public double getValorCompra() { 11 | return valorCompra; 12 | } 13 | 14 | public void setValorCompra(double valorCompra) { 15 | this.valorCompra = valorCompra; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/br/padroes/prototype/Cliente.java: -------------------------------------------------------------------------------- 1 | package br.padroes.prototype; 2 | 3 | public class Cliente { 4 | public static void main(String[] args) { 5 | PalioPrototype prototipoPalio = new PalioPrototype(); 6 | 7 | CarroPrototype palioNovo = prototipoPalio.clonar(); 8 | palioNovo.setValorCompra(27900.0); 9 | CarroPrototype palioUsado = prototipoPalio.clonar(); 10 | palioUsado.setValorCompra(21000.0); 11 | 12 | System.out.println(palioNovo.exibirInfo()); 13 | System.out.println(palioUsado.exibirInfo()); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/br/padroes/prototype/FiestaPrototype.java: -------------------------------------------------------------------------------- 1 | package br.padroes.prototype; 2 | 3 | public class FiestaPrototype extends CarroPrototype { 4 | 5 | protected FiestaPrototype(FiestaPrototype fiestaPrototype) { 6 | this.valorCompra = fiestaPrototype.getValorCompra(); 7 | } 8 | 9 | public FiestaPrototype() { 10 | valorCompra = 0.0; 11 | } 12 | 13 | @Override 14 | public String exibirInfo() { 15 | return "Modelo: Fiesta\nMontadora: Ford\n" + "Valor: R$" 16 | + getValorCompra(); 17 | } 18 | 19 | @Override 20 | public CarroPrototype clonar() { 21 | return new FiestaPrototype(this); 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /src/br/padroes/prototype/GolPrototype.java: -------------------------------------------------------------------------------- 1 | package br.padroes.prototype; 2 | 3 | public class GolPrototype extends CarroPrototype { 4 | 5 | protected GolPrototype(GolPrototype golPrototype) { 6 | this.valorCompra = golPrototype.getValorCompra(); 7 | } 8 | 9 | public GolPrototype() { 10 | valorCompra = 0.0; 11 | } 12 | 13 | @Override 14 | public String exibirInfo() { 15 | return "Modelo: Gol\nMontadora: Wolkswagen\n" + "Valor: R$" 16 | + getValorCompra(); 17 | } 18 | 19 | @Override 20 | public CarroPrototype clonar() { 21 | return new GolPrototype(this); 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /src/br/padroes/prototype/PalioPrototype.java: -------------------------------------------------------------------------------- 1 | package br.padroes.prototype; 2 | 3 | public class PalioPrototype extends CarroPrototype { 4 | 5 | private PalioPrototype(PalioPrototype palioPrototype) { 6 | this.valorCompra = palioPrototype.getValorCompra(); 7 | } 8 | 9 | public PalioPrototype() { 10 | valorCompra = 0.0; 11 | } 12 | 13 | @Override 14 | public String exibirInfo() { 15 | return "Modelo: Palio\n" + "Montadora: Fiat\n" + "Valor: R$" 16 | + getValorCompra(); 17 | } 18 | 19 | @Override 20 | public CarroPrototype clonar() { 21 | return new PalioPrototype(this); 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /src/br/padroes/proxy/BancoProxy.java: -------------------------------------------------------------------------------- 1 | package br.padroes.proxy; 2 | 3 | public class BancoProxy extends BancoUsuarios { 4 | 5 | protected String usuario, senha; 6 | 7 | public BancoProxy(String usuario, String senha) { 8 | this.usuario = usuario; 9 | this.senha = senha; 10 | } 11 | 12 | @Override 13 | public String getNumeroDeUsuarios() { 14 | if (temPermissaoDeAcesso()) { 15 | return super.getNumeroDeUsuarios(); 16 | } 17 | return null; 18 | } 19 | 20 | @Override 21 | public String getUsuariosConectados() { 22 | if (temPermissaoDeAcesso()) { 23 | return super.getUsuariosConectados(); 24 | } 25 | return null; 26 | } 27 | 28 | private boolean temPermissaoDeAcesso() { 29 | return usuario == "admin" && senha == "admin"; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/br/padroes/proxy/BancoUsuarios.java: -------------------------------------------------------------------------------- 1 | package br.padroes.proxy; 2 | 3 | public class BancoUsuarios { 4 | private int quantidadeDeUsuarios; 5 | private int usuariosConectados; 6 | 7 | public BancoUsuarios() { 8 | quantidadeDeUsuarios = (int) (Math.random() * 100); 9 | usuariosConectados = (int) (Math.random() * 10); 10 | } 11 | 12 | public String getNumeroDeUsuarios() { 13 | return new String("Total de usuários: " + quantidadeDeUsuarios); 14 | } 15 | 16 | public String getUsuariosConectados() { 17 | return new String("Usuários conectados: " + usuariosConectados); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/br/padroes/proxy/Cliente.java: -------------------------------------------------------------------------------- 1 | package br.padroes.proxy; 2 | 3 | public class Cliente { 4 | public static void main(String[] args) { 5 | System.out.println("Hacker acessando >("); 6 | BancoUsuarios banco = new BancoProxy("Hacker", "1234"); 7 | System.out.println(banco.getNumeroDeUsuarios()); 8 | System.out.println(banco.getUsuariosConectados()); 9 | 10 | System.out.println("\nAdministrador acessando :)"); 11 | banco = new BancoProxy("admin", "admin"); 12 | System.out.println(banco.getNumeroDeUsuarios()); 13 | System.out.println(banco.getUsuariosConectados()); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/br/padroes/state/Cliente.java: -------------------------------------------------------------------------------- 1 | package br.padroes.state; 2 | 3 | public class Cliente { 4 | public static void main(String[] args) { 5 | Mario mario = new Mario(); 6 | mario.pegarCogumelo(); 7 | mario.pegarPena(); 8 | mario.levarDano(); 9 | mario.pegarFlor(); 10 | mario.pegarFlor(); 11 | mario.levarDano(); 12 | mario.levarDano(); 13 | mario.pegarPena(); 14 | mario.levarDano(); 15 | mario.levarDano(); 16 | mario.levarDano(); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/br/padroes/state/Mario.java: -------------------------------------------------------------------------------- 1 | package br.padroes.state; 2 | 3 | public class Mario { 4 | protected MarioState estado; 5 | 6 | public Mario() { 7 | estado = new MarioPequeno(); 8 | } 9 | 10 | public void pegarCogumelo() { 11 | estado = estado.pegarCogumelo(); 12 | } 13 | 14 | public void pegarFlor() { 15 | estado = estado.pegarFlor(); 16 | } 17 | 18 | public void pegarPena() { 19 | estado = estado.pegarPena(); 20 | } 21 | 22 | public void levarDano() { 23 | estado = estado.levarDano(); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/br/padroes/state/MarioCapa.java: -------------------------------------------------------------------------------- 1 | package br.padroes.state; 2 | 3 | public class MarioCapa implements MarioState { 4 | 5 | @Override 6 | public MarioState pegarCogumelo() { 7 | System.out.println("Mario ganhou 1000 pontos"); 8 | return this; 9 | } 10 | 11 | @Override 12 | public MarioState pegarFlor() { 13 | System.out.println("Mario com fogo"); 14 | return new MarioFogo(); 15 | } 16 | 17 | @Override 18 | public MarioState pegarPena() { 19 | System.out.println("Mario ganhou 1000 pontos"); 20 | return this; 21 | } 22 | 23 | @Override 24 | public MarioState levarDano() { 25 | System.out.println("Mario grande"); 26 | return new MarioGrande(); 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /src/br/padroes/state/MarioFogo.java: -------------------------------------------------------------------------------- 1 | package br.padroes.state; 2 | 3 | public class MarioFogo implements MarioState { 4 | 5 | @Override 6 | public MarioState pegarCogumelo() { 7 | System.out.println("Mario ganhou 1000 pontos"); 8 | return this; 9 | } 10 | 11 | @Override 12 | public MarioState pegarFlor() { 13 | System.out.println("Mario ganhou 1000 pontos"); 14 | return this; 15 | } 16 | 17 | @Override 18 | public MarioState pegarPena() { 19 | System.out.println("Mario com capa"); 20 | return new MarioCapa(); 21 | } 22 | 23 | @Override 24 | public MarioState levarDano() { 25 | System.out.println("Mario grande"); 26 | return new MarioGrande(); 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /src/br/padroes/state/MarioGrande.java: -------------------------------------------------------------------------------- 1 | package br.padroes.state; 2 | 3 | public class MarioGrande implements MarioState { 4 | 5 | @Override 6 | public MarioState pegarCogumelo() { 7 | System.out.println("Mario ganhou 1000 pontos"); 8 | return this; 9 | } 10 | 11 | @Override 12 | public MarioState pegarFlor() { 13 | System.out.println("Mario com fogo"); 14 | return new MarioFogo(); 15 | } 16 | 17 | @Override 18 | public MarioState pegarPena() { 19 | System.out.println("Mario com capa"); 20 | return new MarioCapa(); 21 | } 22 | 23 | @Override 24 | public MarioState levarDano() { 25 | System.out.println("Mario pequeno"); 26 | return new MarioPequeno(); 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /src/br/padroes/state/MarioMorto.java: -------------------------------------------------------------------------------- 1 | package br.padroes.state; 2 | 3 | public class MarioMorto implements MarioState { 4 | 5 | @Override 6 | public MarioState pegarCogumelo() { 7 | return null; 8 | } 9 | 10 | @Override 11 | public MarioState pegarFlor() { 12 | return null; 13 | } 14 | 15 | @Override 16 | public MarioState pegarPena() { 17 | return null; 18 | } 19 | 20 | @Override 21 | public MarioState levarDano() { 22 | return null; 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/br/padroes/state/MarioPequeno.java: -------------------------------------------------------------------------------- 1 | package br.padroes.state; 2 | 3 | public class MarioPequeno implements MarioState { 4 | 5 | @Override 6 | public MarioState pegarCogumelo() { 7 | System.out.println("Mario grande"); 8 | return new MarioGrande(); 9 | } 10 | 11 | @Override 12 | public MarioState pegarFlor() { 13 | System.out.println("Mario grande com fogo"); 14 | return new MarioFogo(); 15 | } 16 | 17 | @Override 18 | public MarioState pegarPena() { 19 | System.out.println("Mario grande com capa"); 20 | return new MarioCapa(); 21 | } 22 | 23 | @Override 24 | public MarioState levarDano() { 25 | System.out.println("Mario morto"); 26 | return new MarioMorto(); 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /src/br/padroes/state/MarioState.java: -------------------------------------------------------------------------------- 1 | package br.padroes.state; 2 | 3 | public interface MarioState { 4 | MarioState pegarCogumelo(); 5 | 6 | MarioState pegarFlor(); 7 | 8 | MarioState pegarPena(); 9 | 10 | MarioState levarDano(); 11 | } 12 | -------------------------------------------------------------------------------- /src/br/padroes/strategy/CalculaImposto.java: -------------------------------------------------------------------------------- 1 | package br.padroes.strategy; 2 | 3 | interface CalculaImposto { 4 | double calculaSalarioComImposto(Funcionario umFuncionario); 5 | } 6 | -------------------------------------------------------------------------------- /src/br/padroes/strategy/CalculoImpostoQuinzeOuDez.java: -------------------------------------------------------------------------------- 1 | package br.padroes.strategy; 2 | 3 | public class CalculoImpostoQuinzeOuDez implements CalculaImposto { 4 | @Override 5 | public double calculaSalarioComImposto(Funcionario umFuncionario) { 6 | if (umFuncionario.getSalarioBase() > 2000) { 7 | return umFuncionario.getSalarioBase() * 0.85; 8 | } 9 | return umFuncionario.getSalarioBase() * 0.9; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/br/padroes/strategy/CalculoImpostoVinteOuQuinze.java: -------------------------------------------------------------------------------- 1 | package br.padroes.strategy; 2 | 3 | public class CalculoImpostoVinteOuQuinze implements CalculaImposto { 4 | @Override 5 | public double calculaSalarioComImposto(Funcionario umFuncionario) { 6 | if (umFuncionario.getSalarioBase() > 3500) { 7 | return umFuncionario.getSalarioBase() * 0.8; 8 | } 9 | return umFuncionario.getSalarioBase() * 0.85; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/br/padroes/strategy/Funcionario.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarcosX/Padr-es-de-Projeto/69c10c862069194ab455829395ea500fc96a76b4/src/br/padroes/strategy/Funcionario.java -------------------------------------------------------------------------------- /src/br/padroes/strategy/Main.java: -------------------------------------------------------------------------------- 1 | package br.padroes.strategy; 2 | 3 | public class Main { 4 | public static void main(String[] args) { 5 | Funcionario umFuncionario = new Funcionario(Funcionario.DESENVOLVEDOR, 6 | 2100); 7 | System.out.println(umFuncionario.calcularSalarioComImposto()); 8 | 9 | Funcionario outroFuncionario = new Funcionario(Funcionario.DESENVOLVEDOR, 10 | 1700); 11 | System.out.println(outroFuncionario.calcularSalarioComImposto()); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/br/padroes/templateMethod/Cliente.java: -------------------------------------------------------------------------------- 1 | package br.padroes.templateMethod; 2 | 3 | public class Cliente { 4 | public static void main(String[] args) { 5 | 6 | PlayList minhaPlayList = new PlayList(ModoDeReproducao.porNome); 7 | minhaPlayList.adicionarMusica("Everlong", "Foo Fighters", "1997", 5); 8 | minhaPlayList.adicionarMusica("Song 2", "Blur", "1997", 4); 9 | minhaPlayList.adicionarMusica("American Jesus", "Bad Religion", "1993", 10 | 3); 11 | minhaPlayList.adicionarMusica("No Cigar", "Milencollin", "2001", 2); 12 | minhaPlayList.adicionarMusica("Ten", "Pearl Jam", "1991", 1); 13 | 14 | System.out.println("=== Lista por Nome de Musica ==="); 15 | minhaPlayList.mostrarListaDeReproducao(); 16 | 17 | System.out.println("\n=== Lista por Autor ==="); 18 | minhaPlayList.setModoDeReproducao(ModoDeReproducao.porAutor); 19 | minhaPlayList.mostrarListaDeReproducao(); 20 | 21 | System.out.println("\n=== Lista por Ano ==="); 22 | minhaPlayList.setModoDeReproducao(ModoDeReproducao.porAno); 23 | minhaPlayList.mostrarListaDeReproducao(); 24 | 25 | System.out.println("\n=== Lista por Estrela ==="); 26 | minhaPlayList.setModoDeReproducao(ModoDeReproducao.porEstrela); 27 | minhaPlayList.mostrarListaDeReproducao(); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/br/padroes/templateMethod/ModoDeReproducao.java: -------------------------------------------------------------------------------- 1 | package br.padroes.templateMethod; 2 | 3 | public enum ModoDeReproducao { 4 | porNome, porAutor, porAno, porEstrela 5 | } 6 | -------------------------------------------------------------------------------- /src/br/padroes/templateMethod/MusicaMP3.java: -------------------------------------------------------------------------------- 1 | package br.padroes.templateMethod; 2 | 3 | public class MusicaMP3 { 4 | String nome; 5 | String autor; 6 | String ano; 7 | int estrelas; 8 | 9 | public MusicaMP3(String nome, String autor, String ano, int estrela) { 10 | this.nome = nome; 11 | this.autor = autor; 12 | this.ano = ano; 13 | this.estrelas = estrela; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/br/padroes/templateMethod/OrdenadorPorAno.java: -------------------------------------------------------------------------------- 1 | package br.padroes.templateMethod; 2 | 3 | public class OrdenadorPorAno extends OrdenadorTemplate { 4 | 5 | @Override 6 | public boolean isPrimeiro(MusicaMP3 musica1, MusicaMP3 musica2) { 7 | if (musica1.ano.compareToIgnoreCase(musica2.ano) <= 0) { 8 | return true; 9 | } 10 | return false; 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /src/br/padroes/templateMethod/OrdenadorPorAutor.java: -------------------------------------------------------------------------------- 1 | package br.padroes.templateMethod; 2 | 3 | public class OrdenadorPorAutor extends OrdenadorTemplate { 4 | 5 | @Override 6 | public boolean isPrimeiro(MusicaMP3 musica1, MusicaMP3 musica2) { 7 | if (musica1.autor.compareToIgnoreCase(musica2.autor) <= 0) { 8 | return true; 9 | } 10 | return false; 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /src/br/padroes/templateMethod/OrdenadorPorEstrela.java: -------------------------------------------------------------------------------- 1 | package br.padroes.templateMethod; 2 | 3 | public class OrdenadorPorEstrela extends OrdenadorTemplate { 4 | 5 | @Override 6 | public boolean isPrimeiro(MusicaMP3 musica1, MusicaMP3 musica2) { 7 | if (musica1.estrelas > musica2.estrelas) { 8 | return true; 9 | } 10 | return false; 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /src/br/padroes/templateMethod/OrdenadorPorNome.java: -------------------------------------------------------------------------------- 1 | package br.padroes.templateMethod; 2 | 3 | public class OrdenadorPorNome extends OrdenadorTemplate { 4 | 5 | @Override 6 | public boolean isPrimeiro(MusicaMP3 musica1, MusicaMP3 musica2) { 7 | if (musica1.nome.compareToIgnoreCase(musica2.nome) <= 0) { 8 | return true; 9 | } 10 | return false; 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /src/br/padroes/templateMethod/OrdenadorTemplate.java: -------------------------------------------------------------------------------- 1 | package br.padroes.templateMethod; 2 | 3 | import java.util.ArrayList; 4 | 5 | public abstract class OrdenadorTemplate { 6 | public abstract boolean isPrimeiro(MusicaMP3 musica1, MusicaMP3 musica2); 7 | 8 | protected ArrayList ordenarMusica(ArrayList lista) { 9 | ArrayList novaLista = new ArrayList(); 10 | for (MusicaMP3 musicaMP3 : lista) { 11 | novaLista.add(musicaMP3); 12 | } 13 | 14 | for (int i = 0; i < novaLista.size(); i++) { 15 | for (int j = i; j < novaLista.size(); j++) { 16 | if (!isPrimeiro(novaLista.get(i), novaLista.get(j))) { 17 | MusicaMP3 temp = novaLista.get(j); 18 | novaLista.set(j, novaLista.get(i)); 19 | novaLista.set(i, temp); 20 | } 21 | } 22 | } 23 | 24 | return novaLista; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/br/padroes/templateMethod/PlayList.java: -------------------------------------------------------------------------------- 1 | package br.padroes.templateMethod; 2 | 3 | import java.util.ArrayList; 4 | 5 | public class PlayList { 6 | protected ArrayList musicas; 7 | protected OrdenadorTemplate ordenador; 8 | 9 | public PlayList(ModoDeReproducao modo) { 10 | musicas = new ArrayList(); 11 | switch (modo) { 12 | case porAno: 13 | ordenador = new OrdenadorPorAno(); 14 | break; 15 | case porAutor: 16 | ordenador = new OrdenadorPorAutor(); 17 | break; 18 | case porEstrela: 19 | ordenador = new OrdenadorPorEstrela(); 20 | break; 21 | case porNome: 22 | ordenador = new OrdenadorPorNome(); 23 | break; 24 | default: 25 | break; 26 | } 27 | } 28 | 29 | public void setModoDeReproducao(ModoDeReproducao modo) { 30 | ordenador = null; 31 | switch (modo) { 32 | case porAno: 33 | ordenador = new OrdenadorPorAno(); 34 | break; 35 | case porAutor: 36 | ordenador = new OrdenadorPorAutor(); 37 | break; 38 | case porEstrela: 39 | ordenador = new OrdenadorPorEstrela(); 40 | break; 41 | case porNome: 42 | ordenador = new OrdenadorPorNome(); 43 | break; 44 | default: 45 | break; 46 | } 47 | } 48 | 49 | public void adicionarMusica(String nome, String autor, String ano, 50 | int estrela) { 51 | musicas.add(new MusicaMP3(nome, autor, ano, estrela)); 52 | } 53 | 54 | public void mostrarListaDeReproducao() { 55 | ArrayList novaLista = new ArrayList(); 56 | novaLista = ordenador.ordenarMusica(musicas); 57 | 58 | for (MusicaMP3 musica : novaLista) { 59 | System.out.println(musica.nome + " - " + musica.autor + "\n Ano: " 60 | + musica.ano + "\n Estrelas: " + musica.estrelas); 61 | } 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /src/br/padroes/visitor/ArvoreBinaria.java: -------------------------------------------------------------------------------- 1 | package br.padroes.visitor; 2 | 3 | public class ArvoreBinaria { 4 | No raiz; 5 | int quantidadeDeElementos; 6 | 7 | public ArvoreBinaria(int chaveRaiz) { 8 | raiz = new No(chaveRaiz); 9 | quantidadeDeElementos = 0; 10 | } 11 | 12 | public void inserir(int chave) { 13 | inserir(chave, raiz); 14 | } 15 | 16 | public void remover(int chave){ 17 | } 18 | 19 | public void buscar(int chave){ 20 | 21 | } 22 | 23 | private void inserir(int chave, No no) { 24 | if (no.getChave() == chave) 25 | return; 26 | if (chave > no.getChave()) { 27 | if (no.getDireito() == null) { 28 | no.setDireito(new No(chave)); 29 | quantidadeDeElementos++; 30 | return; 31 | } 32 | inserir(chave, no.getDireito()); 33 | } else { 34 | if (no.getEsquerdo() == null) { 35 | no.setEsquerdo(new No(chave)); 36 | quantidadeDeElementos++; 37 | return; 38 | } 39 | inserir(chave, no.getEsquerdo()); 40 | } 41 | } 42 | 43 | public void aceitarVisitante(ArvoreVisitor visitor) { 44 | visitor.visitar(raiz); 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /src/br/padroes/visitor/ArvoreVisitor.java: -------------------------------------------------------------------------------- 1 | package br.padroes.visitor; 2 | 3 | public interface ArvoreVisitor { 4 | 5 | void visitar(No no); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/br/padroes/visitor/Cliente.java: -------------------------------------------------------------------------------- 1 | package br.padroes.visitor; 2 | 3 | public class Cliente { 4 | public static void main(String[] args) { 5 | ArvoreBinaria arvore = new ArvoreBinaria(7); 6 | 7 | arvore.inserir(15); 8 | arvore.inserir(10); 9 | arvore.inserir(5); 10 | arvore.inserir(2); 11 | arvore.inserir(1); 12 | arvore.inserir(20); 13 | 14 | System.out.println("### Exibindo em ordem ###"); 15 | arvore.aceitarVisitante(new ExibirInOrderVisitor()); 16 | System.out.println("### Exibindo pre ordem ###"); 17 | arvore.aceitarVisitante(new ExibirPreOrdemVisitor()); 18 | System.out.println("### Exibindo pós ordem ###"); 19 | arvore.aceitarVisitante(new ExibirPostOrderVisitor()); 20 | System.out.println("### Exibindo identado ###"); 21 | arvore.aceitarVisitante(new ExibirIndentadoVisitor()); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/br/padroes/visitor/ExibirInOrderVisitor.java: -------------------------------------------------------------------------------- 1 | package br.padroes.visitor; 2 | 3 | public class ExibirInOrderVisitor implements ArvoreVisitor { 4 | 5 | @Override 6 | public void visitar(No no) { 7 | if (no == null) 8 | return; 9 | this.visitar(no.getEsquerdo()); 10 | System.out.println(no); 11 | this.visitar(no.getDireito()); 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /src/br/padroes/visitor/ExibirIndentadoVisitor.java: -------------------------------------------------------------------------------- 1 | package br.padroes.visitor; 2 | 3 | public class ExibirIndentadoVisitor implements ArvoreVisitor { 4 | 5 | @Override 6 | public void visitar(No no) { 7 | if (no == null) { 8 | return; 9 | } 10 | System.out.println(no); 11 | visitar(no.getEsquerdo(), 1); 12 | visitar(no.getDireito(), 1); 13 | } 14 | 15 | private void visitar(No no, int qtdEspacos) { 16 | if (no == null) { 17 | return; 18 | } 19 | for (int i = 0; i < qtdEspacos; i++) { 20 | System.out.print("-"); 21 | } 22 | System.out.println(no); 23 | visitar(no.getEsquerdo(), qtdEspacos + 1); 24 | visitar(no.getDireito(), qtdEspacos + 1); 25 | } 26 | 27 | } 28 | -------------------------------------------------------------------------------- /src/br/padroes/visitor/ExibirPostOrderVisitor.java: -------------------------------------------------------------------------------- 1 | package br.padroes.visitor; 2 | 3 | public class ExibirPostOrderVisitor implements ArvoreVisitor { 4 | 5 | @Override 6 | public void visitar(No no) { 7 | if (no == null) 8 | return; 9 | visitar(no.getEsquerdo()); 10 | visitar(no.getDireito()); 11 | System.out.println(no); 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /src/br/padroes/visitor/ExibirPreOrdemVisitor.java: -------------------------------------------------------------------------------- 1 | package br.padroes.visitor; 2 | 3 | public class ExibirPreOrdemVisitor implements ArvoreVisitor { 4 | 5 | @Override 6 | public void visitar(No no) { 7 | if (no == null) 8 | return; 9 | System.out.println(no); 10 | visitar(no.getEsquerdo()); 11 | visitar(no.getDireito()); 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /src/br/padroes/visitor/No.java: -------------------------------------------------------------------------------- 1 | package br.padroes.visitor; 2 | 3 | public class No { 4 | protected int chave; 5 | No esquerdo, direito; 6 | 7 | public No(int chave) { 8 | this.chave = chave; 9 | esquerdo = null; 10 | direito = null; 11 | } 12 | 13 | public String toString() { 14 | return String.valueOf(chave); 15 | } 16 | 17 | public int getChave() { 18 | return chave; 19 | } 20 | 21 | public No getEsquerdo() { 22 | return esquerdo; 23 | } 24 | 25 | public void setEsquerdo(No esquerdo) { 26 | this.esquerdo = esquerdo; 27 | } 28 | 29 | public No getDireito() { 30 | return direito; 31 | } 32 | 33 | public void setDireito(No direito) { 34 | this.direito = direito; 35 | } 36 | 37 | } 38 | --------------------------------------------------------------------------------