Designer Pattern Java: Delegation

Postado em por Wolmir Cezer Garbin em Java | 142 Visualizações
Última atualização em:

Veja neste tutorial como funciona o padrão de projeto Delegation Pattern em Java, com exemplos de código para facilitar o entendimento.

Todo mundo tem algo para vender, AnuncieOn.com o melhor site de anúncios grátis de todo o Brasil. ABRIR

Antes de iniciar, saiba que essa postagem faz parte da sequência de posts relacionados a padrões de projetos, onde serão abordados todos os principais padrões utilizados.

Delegation Pattern

O Delegation Pattern é uma forma de delegar uma responsabilidade para outro objeto próximo. É onde o objeto expressa determinado comportamento para o exterior, deixando a responsabilidade de determinado comportamento para outro objeto.

A delegação é bem comum, muitas vezes usada por outros padrões, como: Visitor, Observer, Strategy e Event Listener, os quais serão demonstrados em outras postagens.

Onde usar Delegation Pattern

O que é um consenso geral, é use delegação como alternativa à herança. Quando existe um relacionamento próximo (Pai e Filho), a herança é uma boa estratégia, mas, ela agrupa objetos muito perto. A delegação é uma maneira mais flexível de expressar um relacionamento entre classes.


Dois cenários interessantes de uso são:

  • quando precisa reduzir o acoplamento de métodos à sua classe.
  • quando se tem componentes que se comportam de maneira idêntica, mas percebe que essa situação pode mudar no futuro.

Como funciona Delegation Pattern

Vamos analisar um exemplo prático de Delegation Pattern. Pense no seguinte cenário, precisamos que nossa classe retorne um valor convertido para Dólar e para Euro hipoteticamente. Então poderíamos ter uma classe da seguinte forma:

public class Conta {

    public Double saldo;


    public Double converterDolar(){
        return saldo * 3.66;
    }
	
	public Double converterEuro(){
        return saldo * 4.21;
    }

	// [...]
}

Note que dessa forma para cada nova moeda que precisamos converter precisaríamos criar um método para cada situação.

Pensando em delegar essa responsabilidade, podemos tornar nossa classe mais flexível. Para isso criaremos a interface Conversor.

public interface Conversor {
    Double converter(Double valor);
}

Agora podemos modificar a classe Conta para usar a interface do conversor.

public class Conta {

    public Double saldo;

    public Double converter(Conversor conversor){
        return conversor.converter(saldo);
    }

    // [getters e setters]
}

Note que removemos os dois métodos que convertiam para dólar e euro por um método chamador converter que recebe um conversor.

Agora podemos criar quantos conversores quisermos. Veja:

public class DolarConverter implements Conversor {

    public Double converter(Double valor) {
        return valor * 3.66;
    }
}
public class EuroConverter implements Conversor {

    public Double converter(Double valor) {
        return valor * 4.21;
    }
}

Agora podemos utilizar os conversores da seguinte forma:

public class Main {

    public static void main(String[] args) {
        Conta conta = new Conta();
        conta.setSaldo(10.0);

        System.out.println(conta.getSaldo());
        System.out.println(conta.converter(new DolarConverter()));
        System.out.println(conta.converter(new EuroConverter()));
    }
}

Note que quando precisamos converter para Dólar, usarmos conta.converter(new DolarConverter()), assim delegamos a responsabilidade de converter o valor para outro objeto desacoplando o código.

Não esqueca de deixar suas dúvidas nos comentários e compartilhar este post.


Wolmir Cezer Garbin

Wolmir Cezer Garbin


Sou formado em Desenvolvimento de Sistemas para Internet pela faculdade Mater Dei e Pós graduado em Desenvolvimento de sistemas em Java pela UTFPR. Trabalho a mais de 9 anos com desenvolvimento em Java, Android e Web utilizando as principais tecnologias do mercado. Atuo como professor na faculdade Mater Dei, programador na Garbo Software e criador do Receitas de Código.

Ver mais

FIQUE POR DENTRO

Receba as novidades todo mês em seu e-mail!

Apoiadores


Publique seu post no Receitas de Código

Agora você pode publicar seu post no Receitas de Código e compartilhar seu conhecimento com muitas pessoas!

Quero publicar