├── .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 |
--------------------------------------------------------------------------------