Você está na página 1de 8

Template method

Vamos construir uma aplicação bancária e todos as tarefas/ações devem ser gravadas quem fez
o que...;

Então cada tarefa tem sua classe: TransferMoneyTask

Vamos criar nossa classe que audita:

Voltando na nossa transferência de dinheiro: criamos o objeto e inicializamos no construtor:


Agora fazemos a generateReportTask, mesmo esquema:

problams é a duplicação de código (audit) e a não obrigatoriedade de seguir o construtor para


poder gravar a auditoria;

a solução é usar herança e jogar os métodos em comum para uma classe base;

vamos adicionar a classe base Task:


O que acontece a seguir no execute vamos deixar pras subclasses, agora vamos criar a classe
abstata que irá para as subclasses:

Como criamos o método abstrato, a classe tem que ser abstrata também:

Agora vamos extender as classes dela


Vamos implementar os métodos e deletar o execute pois estamos na doExecute:

Vamos deletar o audit pois já está declarado na task;


Vai dar erro no this, já temos o construtor na classe task, podemos usar o super

Se ainda está muito repetitivo esse construtor, podemos não utilizar ele também, na classe
task:
Pode ser interessante se é necessário que venha de fora;

Então lá no transfermoney não precisamos daquele construtor, porque vai usar o do extends:
Então no main vamos criar a instancia, aqui ainda temos um problema, pois podemos chamar
direto o doExecute, sem passar pela auditoria

Pra resolver isso, vamos esconder o método:

Private não podemos utilizar, porque privado não pode ser herdado;

Então vamos usar o protected


Na transfer também vamos usar o protected;

Então o único caminho é utilizar o execute, onde passa a auditoria:

Você também pode gostar