Template Method - Padrões de Projeto no PHP Artigo

Conheça os cursos gratuitos do WebDevBr! - Inscreva-se!


Este artigo foi publicado a 1 ano, 2 meses, 1 semana, 1 dia atrás.

Template Method é um padrão de projeto comportamental e um dos meus preferidos já que ele define os métodos a serem usados na classe abstrata e a concreta apenas segue a regra, ou seja, eu tenho uma estrutura fixa e bem definida. O resultado é uma api mais simples e uma organização de código nas classes muito mais elaborada.

É muito comum (comum != sempre) as classes concretas que adotam o Template Method terem apenas métodos protected que são definidos pela abstract e um método public que vai realizar as ações necessárias, um tipo de "guia do objeto".

Para ver todos os links desta série clique aqui.

Gostou deste artigo?

Receba atualizações semanais com novos artigos do WebDevBr e outras dicas!

Para que seja corretamente aplicado o Template Method precisa de uma classe abstrata e uma ou mais classes concretas:

<?php

abstract class ClasseAbstrata
{
    public function executaOperacoes()
    {
        var_dump('Início do processo');
        $this->operacaoUm();
        $this->operacaoDois();
        var_dump('Fim do processo');
    }

    abstract protected function operacaoUm();
    abstract protected function operacaoDois();
}

class ClasseConcreta extends ClasseAbstrata
{
    protected function operacaoUm()
    {
        var_dump('Processo 1');
    }

    protected function operacaoDois()
    {
        var_dump('Processo 2');
    }
}

(new ClasseConcreta)->executaOperacoes();

A classe abstrata é quem realmente define a estrutura do objeto, ele tem um método público (o que será realmente executado) e define os métodos protegidos e que terão toda a lógica definida na classe concreta, no fim eu executo o método da abstrata que herdei através da concreta.

Óbvio que vai fazer mais sentido a medida que o seu código crescer, mas é uma excelente forma de aplicar o princípio Open/Closed do SOLID, já que sempre que um novo recurso precisar ser adicionado simplesmente criamos outra classe, é mais rápido e mantém o código simples e limpo, mesmo se crescer muito.

Aliada a um bom padrão de criação da pra fazer muita coisa legal e organizada com Template Method.

Deixei o exemplo compativel com versões mais antigas do PHP, como 5.6 e anteriores, mas com PHP 7 eu poderia, inclusive, definir o tipo de retorno que eu espero dos métodos, organizando ainda mais o trabalho.

Gravei um curso de introdução a padrões de projeto e ele está disponível aqui no WebDevBr, é só se cadastrar pra assistir.


Cursos relacionados


* Parcelamento apenas cartão de crédito! Pode haver uma pequena variação no parcelamento em relação a simulações apresentadas!