Padrão Template Method
Parte da seção Object Oriented Programming do Journey de Python da Coddy — lição 52 de 64.
O padrão Template Method define o esqueleto de um algoritmo em uma classe base, permitindo que subclasses sobrescrevam etapas específicas sem alterar a estrutura do algoritmo.
Aqui está uma classe base com um método template:
class DataProcessor:
def process(self):
"""Método template definindo a estrutura do algoritmo"""
self.read_data()
self.process_data()
self.save_data()
def read_data(self):
print("Reading data...")
def process_data(self):
raise NotImplementedError("Subclasses must implement this")
def save_data(self):
print("Saving data...")O método template process() define os passos do algoritmo, enquanto process_data() é deixado para as subclasses implementarem.
Crie classes concretas que implementam o método abstrato:
class CSVProcessor(DataProcessor):
def process_data(self):
print("Processing CSV data")
class JSONProcessor(DataProcessor):
def process_data(self):
print("Processing JSON data")Cada classe concreta fornece sua própria implementação da etapa exigida.
Use o template method:
csv_processor = CSVProcessor()
csv_processor.process()
print() # Linha vazia
json_processor = JSONProcessor()
json_processor.process()Crie outro exemplo com um modelo de jogo:
class Game:
def play(self):
"""Template method for playing a game"""
self.start_game()
self.play_game()
self.end_game()
def start_game(self):
print("Game started!")
def play_game(self):
raise NotImplementedError("Define the game rules")
def end_game(self):
print("Game ended!")
class Chess(Game):
def play_game(self):
print("Playing chess - thinking strategically...")
class Soccer(Game):
def play_game(self):
print("Playing soccer - running and kicking...")
chess = Chess()
chess.play()Saída:
Reading data...
Processing CSV data
Saving data...
Reading data...
Processing JSON data
Saving data...
Game started!
Playing chess - thinking strategically...
Game ended!Ponto-chave: O padrão Template Method define uma estrutura de algoritmo comum na classe pai, permitindo que as subclasses customizem etapas específicas. A classe pai controla o fluxo geral, mas as subclasses fornecem as implementações específicas. Isso garante uma estrutura consistente, permitindo flexibilidade em etapas individuais.
Desafio
MédioImplemente o template.py e o driver.py com encapsulamento e métodos adequados. Siga os comentários TODO para orientação passo a passo.
Folha de consulta
O padrão Template Method define o esqueleto de um algoritmo em uma classe base, permitindo que as subclasses substituam etapas específicas sem alterar a estrutura do algoritmo.
Crie uma classe base com um método template:
class DataProcessor:
def process(self):
"""Método template definindo a estrutura do algoritmo"""
self.read_data()
self.process_data()
self.save_data()
def read_data(self):
print("Reading data...")
def process_data(self):
raise NotImplementedError("Subclasses must implement this")
def save_data(self):
print("Saving data...")Crie classes concretas que implementam o método abstrato:
class CSVProcessor(DataProcessor):
def process_data(self):
print("Processing CSV data")
class JSONProcessor(DataProcessor):
def process_data(self):
print("Processing JSON data")Use o método template:
csv_processor = CSVProcessor()
csv_processor.process()
json_processor = JSONProcessor()
json_processor.process()O padrão Template Method define uma estrutura de algoritmo comum na classe pai, permitindo que as subclasses personalizem etapas específicas. A classe pai controla o fluxo geral, mas as subclasses fornecem as implementações específicas.
Experimente você mesmo
from template import Template
# Manipulador de caso de teste
test_case = input()
if test_case == "basic_test":
# TODO: Criar um objeto Template com o nome "Test Name"
# TODO: Chamar o método display_info() no objeto
pass
elif test_case == "validation_test":
# TODO: Criar um objeto Template com o nome "Validation Test"
# TODO: Imprimir o nome usando a propriedade name no formato: "Name: {obj.name}"
passEsta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Object Oriented Programming
1Fundamentos de POO
Arquivos ExternosIntrodução à POOClasses vs ObjetosO Parâmetro selfMétodosAtributosMétodo Construtor (__init__)Recapitulação - Calculadora Simples4Herança
Herança BásicaA Função super()Sobrescrita de MétodoHerança MúltiplaOrdem de Resolução de MétodosRecapitulação - Hierarquia de Funcionários7Métodos Especiais
Introdução aos Métodos MágicosSobrecarga de OperadoresMétodos Mágicos de ContêinerRecapitulação - Lista Personalizada10Padrões de Projeto Parte 1
Introdução a Padrões de ProjetoPadrão SingletonPadrão FactoryPadrão ObserverPadrão Strategy2Decoradores
Introdução aos DecoradoresDecorador de PropriedadeDecorador de Método EstáticoDecorador de Método de Classe5Polimorfismo
Sobrescrita de Método RevisitadaDuck TypingClasses e Métodos AbstratosDesign de InterfacesRecapitulação - Calculadora de Formas8Conceitos Avançados de POO
Composição vs HerançaMixinsMétodos Estáticos e de ClasseDecoradores de ClasseGerenciadores de Contexto11Padrões de Projeto Parte 2
Padrão CommandPadrão AdapterPadrão DecoratorPadrão Template MethodPadrão StatePadrão Composite3Propriedades de Classe
Variáveis de Instância vs de ClasseDecoradores de PropriedadeAtributos PrivadosRecapitulação - Gerenciador de Conta Bancária6Encapsulamento
Membros Públicos, Protegidos e PrivadosModificadores de AcessoOcultação de InformaçãoProperty Decorators AvançadosRecapitulação - Sistema de Registro de Alunos12Projeto: Gerenciamento de Biblioteca
Visão Geral do ProjetoClasses Livro e Usuário