Created
February 22, 2024 11:19
-
-
Save alexjosesilva/35cf3684fdedcfc09dfda152990ff2da to your computer and use it in GitHub Desktop.
Decorator
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Interface Componente | |
interface Pessoa { | |
double calcularPeso(); | |
} | |
// Classe Concreta Componente | |
class PessoaBase implements Pessoa { | |
private double peso; | |
public PessoaBase(double peso) { | |
this.peso = peso; | |
} | |
@Override | |
public double calcularPeso() { | |
return peso; | |
} | |
} | |
// Classe Decoradora | |
abstract class Decorator implements Pessoa { | |
protected Pessoa pessoa; | |
public Decorator(Pessoa pessoa) { | |
this.pessoa = pessoa; | |
} | |
@Override | |
public double calcularPeso() { | |
return pessoa.calcularPeso(); | |
} | |
} | |
// Decorador Concreto | |
class PessoaComRoupa extends Decorator { | |
private double pesoRoupa; | |
public PessoaComRoupa(Pessoa pessoa, double pesoRoupa) { | |
super(pessoa); | |
this.pesoRoupa = pesoRoupa; | |
} | |
@Override | |
public double calcularPeso() { | |
return super.calcularPeso() + pesoRoupa; | |
} | |
} | |
// Decorador Concreto | |
class PessoaComMochila extends Decorator { | |
private double pesoMochila; | |
public PessoaComMochila(Pessoa pessoa, double pesoMochila) { | |
super(pessoa); | |
this.pesoMochila = pesoMochila; | |
} | |
@Override | |
public double calcularPeso() { | |
return super.calcularPeso() + pesoMochila; | |
} | |
} | |
// Classe principal para testar o Decorator | |
public class Main { | |
public static void main(String[] args) { | |
// Criando uma pessoa base | |
Pessoa pessoa = new PessoaBase(70.0); | |
// Adicionando roupas à pessoa | |
pessoa = new PessoaComRoupa(pessoa, 2.0); | |
// Adicionando uma mochila à pessoa | |
pessoa = new PessoaComMochila(pessoa, 5.0); | |
// Calculando o peso total da pessoa | |
double pesoTotal = pessoa.calcularPeso(); | |
System.out.println("Peso total da pessoa: " + pesoTotal + " kg"); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment