Capa do Volume 5: Padrões de projeto
Volume 5 de 5

Python de A a Z: Padrões de projeto

por Tiago Silva

Os padrões de projeto clássicos e os que aparecem em todo projeto, escritos como o Python os escreve: a versão clássica, a pythônica, quando não usar e o custo medido.

ImpressoR$ 79,98
E-bookR$ 43,98
Comprar impresso na UICLAP E-book na Amazon: em breve
Páginas
546
Idioma
Português
Publicação
10/2026
Versão do Python
3.15
Formatos
Impresso e e-book (ePub)

Sobre este livro

Padrões de projeto do jeito que o Python escreve

Os padrões de projeto nasceram em linguagens como C++ e Java, e muita gente os copia para o Python sem adaptar, gerando código verboso e pouco pythônico. Este volume mostra, para cada padrão, o problema que ele resolve, a versão clássica de orientação a objetos, a versão pythônica (muitas vezes bem menor, com funções, decoradores e protocolos), quando não usar e o custo medido de cada uma.

Você percorre os padrões de criação, estruturais e comportamentais, os compostos (como o MVC) e os do dia a dia que o catálogo clássico não traz: Object Pool, Null Object, Repository e Unit of Work, Specification, Registry e injeção de dependência. O livro termina com um guia para escolher o padrão certo, e para reconhecer quando a melhor escolha é não usar nenhum.

Em entrevistas e revisões de código para vagas plenas e sêniores, falar a linguagem dos padrões é o que mostra maturidade: é o vocabulário comum de quem projeta sistemas. Entender o porquê de cada um, e não só o nome, é o que fecha a formação de um especialista Python completo.

Por onde começar

Se você nunca programou, comece pelo Volume 1. Este volume pressupõe o Python do dia a dia dos Volumes 1 e 2 (classes, herança, Protocol, decoradores, geradores e dataclass) e noções de testes e tipagem do Volume 3. Se você já tem essa base, pode começar direto por aqui. Cada capítulo traz uma ficha com os pré-requisitos exatos. Os cinco volumes formam a coleção completa, mas cada um se sustenta sozinho.

O que você vai aprender

  • Reconhecer o problema que cada padrão resolve, e quando ele só atrapalha
  • Criar objetos sem acoplar o código ao concreto: Factory Method, Abstract Factory, Builder, Singleton, Prototype e Object Pool
  • Combinar objetos em estruturas: Adapter, Facade, Decorator, Composite, Proxy, Bridge e Flyweight
  • Distribuir responsabilidades: Strategy, Observer, Command, State, Iterator, Visitor, Interpreter e outros
  • Aplicar os padrões do dia a dia: Null Object, Repository e Unit of Work, Specification, Registry e injeção de dependência
  • Comparar a versão clássica com a pythônica, com o custo medido de cada uma
  • Escolher o padrão certo, e reconhecer quando a melhor escolha é nenhum

Sumário

32 capítulos. Toque em um item para ver do que ele trata.

Parte 1: Fundamentos e Padrões de Criação
1O que São Padrões de Projetop. 45
O que é um padrão de projeto, de onde vieram, como ler cada um neste volume e o que o Python muda.
2Factory Methodp. 61
Tirar de quem usa a decisão de qual classe instanciar: quase sempre, em Python, um dicionário resolve.
3Abstract Factoryp. 75
Criar famílias de objetos que combinam entre si, sem que o código saiba a qual família pertencem.
4Singletonp. 87
Uma única instância, e por que em Python o próprio módulo já faz esse papel.
5Builderp. 101
Montar objetos complexos passo a passo, e quando argumentos nomeados e dataclasses já bastam.
6Prototypep. 113
Criar objetos copiando um modelo: copy, deepcopy e copy.replace, e as armadilhas da cópia rasa.
7Object Poolp. 125
Reaproveitar objetos caros de criar, como conexões e buffers, com uma fila e um gerenciador de contexto.
Parte 2: Padrões Estruturais
8Adapterp. 143
Fazer uma classe com a interface errada servir a quem espera outra, sem editar nenhuma das duas.
9Facadep. 155
Uma porta de entrada simples para um subsistema complicado: muitas vezes, uma função ou o __init__.py.
10Decoratorp. 167
Acrescentar comportamento em camadas empilhadas, e a relação com o @decorador do Python.
11Compositep. 181
Tratar um objeto e um grupo de objetos da mesma forma, em árvores como pastas e menus.
12Proxyp. 195
Um substituto que controla o acesso ao objeto real: carga preguiçosa, proteção, cache e auditoria.
13Bridgep. 209
Separar o que o objeto faz de como ele faz, para cada lado variar sozinho.
14Flyweightp. 221
Economizar memória compartilhando o que se repete entre milhares de objetos.
Parte 3: Padrões Comportamentais
15Strategyp. 239
Algoritmos intercambiáveis: em Python, muitas vezes basta uma função.
16Observerp. 251
Avisar vários interessados quando algo muda, sem acoplar quem avisa a quem escuta.
17Commandp. 265
Transformar uma ação em objeto para guardar, repetir, enfileirar e desfazer.
18Template Methodp. 279
Fixar o esqueleto de um algoritmo e deixar passos para outras partes preencherem.
19Iteratorp. 293
Percorrer uma coleção sem conhecer a sua estrutura: o protocolo embutido na linguagem e o gerador.
20Statep. 307
Mudar de comportamento conforme o estado, trocando a pilha de if por uma tabela de transições.
21Chain of Responsibilityp. 321
Passar um pedido por uma sequência de manipuladores, como nos middlewares de frameworks.
22Mediatorp. 335
Um objeto central que coordena colegas que não se conhecem, trocando uma teia por uma estrela.
23Mementop. 351
Salvar e restaurar o estado de um objeto, o fundamento do desfazer, sem quebrar o encapsulamento.
24Visitorp. 367
Acrescentar operações a uma hierarquia sem editar as classes, e como o singledispatch quase o faz desaparecer.
25Interpreterp. 385
Representar a gramática de uma linguagem pequena e interpretá-la, e por que raramente você deve escrever tudo isso.
Parte 4: Padrões Compostos e Padrões do Dia a Dia
26Padrões Compostos: MVCp. 407
Como os padrões se combinam: o MVC como composição de Observer, Command e Memento, no estilo Elm.
27Null Objectp. 425
Representar a ausência com um comportamento neutro, para nunca mais perguntar if x is None.
28Repository e Unit of Workp. 445
Esconder onde os dados vivem e agrupar mudanças em uma transação que dá certo por inteiro ou não acontece.
29Specificationp. 465
Transformar regras de negócio em objetos que se combinam com E, OU e NÃO, e se reaproveitam em filtros e validações.
30Registry e Pluginsp. 485
Um catálogo em que as peças se cadastram sozinhas, e plugins vindos de outros módulos e pacotes.
31Injeção de Dependênciap. 505
Receber de fora o que o código precisa, em vez de criar por dentro: o caminho para código fácil de testar.
32Conclusão: Escolhendo o Padrão Certop. 525
Um guia para escolher o padrão certo, e para reconhecer quando a melhor escolha é não usar nenhum.