├── .gitignore ├── README.md ├── transportadora-com-strategy └── src │ └── com │ └── algaworks │ └── transportadora │ ├── Exemplo.java │ └── service │ ├── Frete.java │ ├── TipoFrete.java │ └── frete │ ├── Normal.java │ └── Sedex.java └── transportadora-sem-strategy └── src └── com └── algaworks └── transportadora ├── Exemplo.java └── service ├── Frete.java └── TipoFrete.java /.gitignore: -------------------------------------------------------------------------------- 1 | *.class 2 | .DS_Store 3 | .metadata 4 | .settings 5 | .classpath 6 | .project 7 | target/ 8 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Design Pattern Strategy 2 | 3 | Estes projetos foram usados em vídeo aula gratuita para exemplificar o uso do Design Pattern Decorator. 4 | 5 | Assista à vídeo aula: [http://blog.algaworks.com/padrao-de-projeto-strategy/](http://blog.algaworks.com/padrao-de-projeto-strategy/) 6 | -------------------------------------------------------------------------------- /transportadora-com-strategy/src/com/algaworks/transportadora/Exemplo.java: -------------------------------------------------------------------------------- 1 | package com.algaworks.transportadora; 2 | 3 | import java.util.Scanner; 4 | 5 | import com.algaworks.transportadora.service.Frete; 6 | import com.algaworks.transportadora.service.TipoFrete; 7 | 8 | public class Exemplo { 9 | 10 | public static void main(String[] args) { 11 | try (Scanner entrada = new Scanner(System.in)) { 12 | System.out.print("Informe a distância: "); 13 | int distancia = entrada.nextInt(); 14 | System.out.print("Qual o tipo de frete (1) Normal, (2) Sedex: "); 15 | int opcaoFrete = entrada.nextInt(); 16 | TipoFrete tipoFrete = TipoFrete.values()[opcaoFrete - 1]; 17 | 18 | Frete frete = tipoFrete.obterFrete(); 19 | double preco = frete.calcularPreco(distancia); 20 | System.out.printf("O valor total é de R$%.2f", preco); 21 | } 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /transportadora-com-strategy/src/com/algaworks/transportadora/service/Frete.java: -------------------------------------------------------------------------------- 1 | package com.algaworks.transportadora.service; 2 | 3 | public interface Frete { 4 | 5 | public double calcularPreco(int distancia); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /transportadora-com-strategy/src/com/algaworks/transportadora/service/TipoFrete.java: -------------------------------------------------------------------------------- 1 | package com.algaworks.transportadora.service; 2 | 3 | import com.algaworks.transportadora.service.frete.Normal; 4 | import com.algaworks.transportadora.service.frete.Sedex; 5 | 6 | public enum TipoFrete { 7 | 8 | NORMAL { 9 | @Override 10 | public Frete obterFrete() { 11 | return new Normal(); 12 | } 13 | }, 14 | SEDEX { 15 | @Override 16 | public Frete obterFrete() { 17 | return new Sedex(); 18 | } 19 | }; 20 | 21 | public abstract Frete obterFrete(); 22 | 23 | } 24 | -------------------------------------------------------------------------------- /transportadora-com-strategy/src/com/algaworks/transportadora/service/frete/Normal.java: -------------------------------------------------------------------------------- 1 | package com.algaworks.transportadora.service.frete; 2 | 3 | import com.algaworks.transportadora.service.Frete; 4 | 5 | public class Normal implements Frete { 6 | 7 | public double calcularPreco(int distancia) { 8 | return distancia * 1.25 + 10; 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /transportadora-com-strategy/src/com/algaworks/transportadora/service/frete/Sedex.java: -------------------------------------------------------------------------------- 1 | package com.algaworks.transportadora.service.frete; 2 | 3 | import com.algaworks.transportadora.service.Frete; 4 | 5 | public class Sedex implements Frete { 6 | 7 | public double calcularPreco(int distancia) { 8 | return distancia * 1.45 + 12; 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /transportadora-sem-strategy/src/com/algaworks/transportadora/Exemplo.java: -------------------------------------------------------------------------------- 1 | package com.algaworks.transportadora; 2 | 3 | import java.util.Scanner; 4 | 5 | import com.algaworks.transportadora.service.Frete; 6 | import com.algaworks.transportadora.service.TipoFrete; 7 | 8 | public class Exemplo { 9 | 10 | public static void main(String[] args) { 11 | try (Scanner entrada = new Scanner(System.in)) { 12 | System.out.print("Informe a distância: "); 13 | int distancia = entrada.nextInt(); 14 | System.out.print("Qual o tipo de frete (1) Normal, (2) Sedex: "); 15 | int opcaoFrete = entrada.nextInt(); 16 | TipoFrete tipoFrete = TipoFrete.values()[opcaoFrete - 1]; 17 | 18 | Frete frete = new Frete(tipoFrete); 19 | double preco = frete.calcularPreco(distancia); 20 | System.out.printf("O valor total é de R$%.2f", preco); 21 | } 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /transportadora-sem-strategy/src/com/algaworks/transportadora/service/Frete.java: -------------------------------------------------------------------------------- 1 | package com.algaworks.transportadora.service; 2 | 3 | public class Frete { 4 | 5 | private TipoFrete tipo; 6 | 7 | public Frete(TipoFrete tipo) { 8 | this.tipo = tipo; 9 | } 10 | 11 | public double calcularPreco(int distancia) { 12 | double preco = 0; 13 | if (TipoFrete.NORMAL.equals(tipo)) { 14 | preco = distancia * 1.25 + 10; 15 | } else if (TipoFrete.SEDEX.equals(tipo)) { 16 | preco = distancia * 1.45 + 12; 17 | } 18 | 19 | return preco; 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /transportadora-sem-strategy/src/com/algaworks/transportadora/service/TipoFrete.java: -------------------------------------------------------------------------------- 1 | package com.algaworks.transportadora.service; 2 | 3 | public enum TipoFrete { 4 | 5 | NORMAL, 6 | SEDEX 7 | 8 | } 9 | --------------------------------------------------------------------------------