A principal funcionalidade deste padrão de projeto é criar métodos genéricos e passar a responsabilidade de implementação as subclasses ou desenvolver métodos genéricos e alguma parte ou funcionalidade deste método possa ser feito nas subclasses.
Vamor fazer um exemplo prático para melhor entendermos:
Varmos criar uma classe conforme abaixo:
abstract public class Operacao {
abstract int handleEfetuarOperacao(int valor1,int valor2);
public void efetuarOperacao(int valor1, int valor2){
int resultado = handleEfetuarOperacao(valor1, valor2);
System.out.println("O resultado é: "+ resultado);
}
}
No código acima criamos uma classe abstrata que possui o método abstrato handleEfetuarOperacao(int valor1, valor2) que as classes filhas de Operacao serão obrigadas a implementar e possuimos também nosso método efetuarOperacao(int valor1, int valor2), que utiliza dos serviços de handleEfetuarOperacao que será implementado pelas classes filhas.
Vamos criar mais uma classe:
public class Soma extends Operacao {
@Override
public int handleEfetuarOperacao(int valor1, int valor2) {
return valor1 + valor2;
}
}
Observe que na classe acima herdamos de Operacao, portanto reimplementamos o método handleEfetuarOperacao devolvendo a soma dos valores passados por parâmetro.
Vamos agora fazer outra classe:
public class Subtracao extends Operacao {
@Override
public int handleEfetuarOperacao(int valor1, int valor2) {
return valor1 - valor2;
}
}
Na classe acima também herdamos de Operacao, portanto reimplementamos o método handleEfetuarOperacao
mas desta vez devolvendo a subtração dos parâmetros.
Vamos agora fazer uma classe que utilizará estes métodos:
public class Cliente {
public static void main(String[] args) {
Operacao op = new Soma();
Operacao op2 = new Subtracao();
op.efetuarOperacao(10, 4);
op2.efetuarOperacao(10, 4);
}
}
Na classe acima criamos dois objetos Operacao um Soma e outro Subtracao e em ambos chamamos o método efetuarOperacao(10,4) passando os mesmos valores nas duas chamadas, porém a primeira chamada irá invocar o método handleEfetuarOperacao da classe Soma e o segundo irá chamar o da classe Subtracao.
Estes serão os resultados obtidos:
O resultado é: 14
O resultado é: 6
Ok, finalizamos este post aqui.
abraço.
