Design Patterns — Trabalho
Design Patterns — Trabalho
Introdução, Singleton, Facade, Strategy, Questões e Referências
Objetivo do Trabalho
Objetivo do Trabalho
Verificar e aprofundar a compreensão sobre Design Patterns em Engenharia de Software.
Entender classificação: Criacionais, Estruturais e Comportamentais.
Estudar funcionamento e usos de Singleton, Facade e Strategy.
O que são Design Patterns?
O que são Design Patterns?
Padrões de projeto são soluções testadas e reutilizáveis para problemas comuns de design de software.
Eles descrevem uma solução—uma estrutura e princípios—não código pronto para copiar e colar.
Benefícios: Reutilização de soluções e melhor comunicação entre desenvolvedores (linguagem comum).
Benefícios: Facilita manutenção e evolução do sistema.
Classificação básica (GoF)
Classificação básica (GoF)
Criacionais: tratam da criação de objetos. Ex.: Singleton.
Estruturais: organizam relacionamentos entre objetos. Ex.: Facade.
Comportamentais: definem comunicação entre objetos. Ex.: Strategy.
Singleton (Criacional)
Singleton (Criacional)
Definição: Padrão que garante que uma classe tenha apenas uma instância e fornece um ponto global de acesso.
Ideia principal: controlar a criação para economizar recursos ou coordenar ações centralizadas.
Exemplos de uso: gerenciadores de configuração, connection pool (coordenador), logger centralizado.
Vantagens: controle de instância, fácil acesso global.
Problemas: dificulta testes, acoplamento global, problemas em ambientes concorrentes.
Exemplo de código — Singleton (Python)
Exemplo de código — Singleton (Python)
class Singleton:
_instance = None
def __new__(cls, *args, **kwargs):
if not cls._instance:
cls._instance = super().__new__(cls)
# inicialização
return cls._instance
# Uso
s1 = Singleton()
s2 = Singleton()
assert s1 is s2
Facade (Estrutural)
Facade (Estrutural)
Definição: Fornece uma interface simplificada para um conjunto de interfaces em um subsistema.
Ideia principal: Encapsular a complexidade para o cliente, expondo operações simples.
Exemplo: Classe 'SistemaPagamento' que internamente chama serviços de validação, gateway e notificação.
Reduz complexidade: cliente chama métodos simples em vez de coordenar múltiplos objetos.
Exemplo de código — Facade (Python)
Exemplo de código — Facade (Python)
class PaymentFacade:
def process_payment(self, order):
[Link](order)
[Link](order)
notifier.send_receipt(order)
# Cliente
payment = PaymentFacade()
payment.process_payment(order)
Strategy (Comportamental)
Strategy (Comportamental)
Definição: Define uma família de algoritmos, encapsula cada um e os torna intercambiáveis.
Ideia: Permite alterar o comportamento do algoritmo em tempo de execução sem alterar o cliente.
Exemplo: Estratégias de cálculo de frete (Sedex, PAC, Motoboy) escolhidas conforme contexto.
Benefícios: flexibilidade, facilita adicionar novas variações sem modificar o cliente.
Exemplo de código — Strategy (Python)
Exemplo de código — Strategy (Python)
class FreteStrategy:
def calcular(self, pedido): pass
class Sedex(FreteStrategy):
def calcular(self, pedido): return 20.0
class Pac(FreteStrategy):
def calcular(self, pedido): return 10.0
# Cliente
class CalculadorFrete:
def __init__(self, strategy): [Link] = strategy
def calcular(self, pedido): return [Link](pedido)
1) O que é um Design Pattern?
1) O que é um Design Pattern?
A) Uma biblioteca de código
B) Uma solução reutilizável para problemas de design
C) Um framework completo
D) Um algoritmo de ordenação
2) Qual padrão garante uma única instância?
2) Qual padrão garante uma única instância?
A) Factory
B) Observer
C) Singleton
D) Strategy
3) Qual padrão fornece uma interface simplificada para su
3) Qual padrão fornece uma interface simplificada para subsistemas complexos?
A) Decorator
B) Facade
C) Adapter
D) Builder
4) Qual padrão é indicado para encapsular algoritmos int
4) Qual padrão é indicado para encapsular algoritmos intercambiáveis?
A) Bridge
B) Strategy
C) Composite
D) Prototype
Gabarito e Justificativas
Gabarito e Justificativas
1) B — Uma solução reutilizável para problemas de design. Justificativa: Patterns descrevem soluções, não código pronto.
2) C — Singleton. Justificativa: garante única instância.
3) B — Facade. Justificativa: simplifica acesso a subsistemas.
4) B — Strategy. Justificativa: encapsula algoritmos intercambiáveis.
Referências
Referências
Gamma, Helm, Johnson, Vlissides. "Design Patterns: Elements of Reusable Object-Oriented Software" (GoF).
[Link] — seção sobre Design Patterns.
Livro/Artigo adicional: "Patterns in Java" ou material online de universidades.