Skip to content

Instantly share code, notes, and snippets.

@alexjosesilva
Created February 22, 2024 11:19
Show Gist options
  • Save alexjosesilva/35cf3684fdedcfc09dfda152990ff2da to your computer and use it in GitHub Desktop.
Save alexjosesilva/35cf3684fdedcfc09dfda152990ff2da to your computer and use it in GitHub Desktop.
Decorator
// 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