Searching...
Português
EnglishEnglish
EspañolSpanish
简体中文Chinese
FrançaisFrench
DeutschGerman
日本語Japanese
PortuguêsPortuguese
ItalianoItalian
한국어Korean
РусскийRussian
NederlandsDutch
العربيةArabic
PolskiPolish
हिन्दीHindi
Tiếng ViệtVietnamese
SvenskaSwedish
ΕλληνικάGreek
TürkçeTurkish
ไทยThai
ČeštinaCzech
RomânăRomanian
MagyarHungarian
УкраїнськаUkrainian
Bahasa IndonesiaIndonesian
DanskDanish
SuomiFinnish
БългарскиBulgarian
עבריתHebrew
NorskNorwegian
HrvatskiCroatian
CatalàCatalan
SlovenčinaSlovak
LietuviųLithuanian
SlovenščinaSlovenian
СрпскиSerbian
EestiEstonian
LatviešuLatvian
فارسیPersian
മലയാളംMalayalam
தமிழ்Tamil
اردوUrdu
Design Patterns

Design Patterns

Elements of Reusable Object-Oriented Software
por Erich Gamma 1994 416 páginas
4.20
11.8K avaliações
Ouvir
Try Full Access for 7 Days
Unlock listening & more!
Continue

Principais conclusões

1. Padrões de Projeto: Soluções Reutilizáveis para Problemas Comuns

Padrões de projeto capturam soluções que foram desenvolvidas e aprimoradas ao longo do tempo.

Capturando a Expertise em Design. Padrões de projeto não são apenas conceitos teóricos; são soluções práticas que surgiram da experiência real no desenvolvimento de software. Eles representam técnicas comprovadas para enfrentar desafios recorrentes no design de sistemas orientados a objetos.

Quatro Elementos Essenciais:

  • Nome do Padrão: Um termo para facilitar a referência e a comunicação.
  • Problema: Descreve quando aplicar o padrão.
  • Solução: Explica os elementos, relacionamentos e responsabilidades.
  • Consequências: Discute as vantagens e desvantagens da aplicação do padrão.

Benefícios do Uso de Padrões de Projeto. Ao utilizar padrões de projeto, os desenvolvedores evitam reinventar a roda e constroem sobre soluções já estabelecidas e bem compreendidas. Isso resulta em designs orientados a objetos mais flexíveis, elegantes e reutilizáveis.

2. Padrões Criacionais: Abstraindo a Instanciação de Objetos

Padrões criacionais tratam do processo de criação de objetos.

Desacoplando a Criação de Objetos. Os padrões criacionais oferecem mecanismos para separar o código cliente das classes concretas que são instanciadas. Essa abstração permite maior flexibilidade na criação, composição e representação dos objetos.

Escopo de Classe vs. Objeto:

  • Padrões criacionais de classe usam herança para variar a classe que será instanciada.
  • Padrões criacionais de objeto delegam a instanciação a outro objeto.

Principais Padrões Criacionais: Abstract Factory, Builder, Factory Method, Prototype e Singleton. Cada um oferece abordagens distintas para gerenciar a criação de objetos, com seus próprios benefícios e compensações.

3. Padrões Estruturais: Compondo Classes e Objetos

Padrões estruturais lidam com a composição de classes ou objetos.

Construindo Estruturas Complexas. Os padrões estruturais focam em como classes e objetos podem ser combinados para formar estruturas maiores e mais complexas. Eles tratam de composição, adaptação de interfaces e compartilhamento eficiente de objetos.

Escopo de Classe vs. Objeto:

  • Padrões estruturais de classe usam herança para compor interfaces ou implementações.
  • Padrões estruturais de objeto utilizam composição de objetos para realizar novas funcionalidades.

Principais Padrões Estruturais: Adapter, Bridge, Composite, Decorator, Facade, Flyweight e Proxy. Esses padrões oferecem soluções para criar estruturas de objetos flexíveis e fáceis de manter.

4. Padrões Comportamentais: Definindo Interação e Responsabilidade entre Objetos

Padrões comportamentais caracterizam as formas pelas quais classes ou objetos interagem e distribuem responsabilidades.

Regulando a Comunicação entre Objetos. Os padrões comportamentais tratam de algoritmos e da atribuição de responsabilidades entre objetos. Eles descrevem não apenas padrões de objetos ou classes, mas também os padrões de comunicação entre eles.

Escopo de Classe vs. Objeto:

  • Padrões comportamentais de classe usam herança para distribuir comportamentos entre classes.
  • Padrões comportamentais de objeto utilizam composição em vez de herança.

Principais Padrões Comportamentais: Chain of Responsibility, Command, Interpreter, Iterator, Mediator, Memento, Observer, State, Strategy, Template Method e Visitor. Esses padrões oferecem soluções para gerenciar fluxos de controle complexos e interações entre objetos.

5. O Padrão Composite: Representando Hierarquias Parte-Todo

Composite permite que clientes tratem objetos individuais e composições de objetos de forma uniforme.

Composição Recursiva. O padrão Composite possibilita a criação de estruturas hierárquicas ao compor objetos em arranjos semelhantes a árvores. Isso permite que clientes tratem objetos individuais e composições de objetos da mesma maneira.

Elementos-Chave:

  • Componente: Define a interface para os objetos na composição.
  • Folha: Representa objetos finais na composição (sem filhos).
  • Composite: Define o comportamento para componentes que possuem filhos e armazena esses componentes.

Benefícios: Simplifica o código do cliente, facilita a adição de novos tipos de componentes e define hierarquias de classes compostas por objetos primitivos e compostos.

6. O Padrão Strategy: Encapsulando Algoritmos para Flexibilidade

Strategy permite que o algoritmo varie independentemente dos clientes que o utilizam.

Encapsulamento de Algoritmos. O padrão Strategy encapsula diferentes algoritmos em classes separadas, tornando-os intercambiáveis. Isso permite que o algoritmo varie sem afetar os clientes que o utilizam.

Elementos-Chave:

  • Strategy: Declara uma interface comum a todos os algoritmos suportados.
  • ConcreteStrategy: Implementa o algoritmo usando a interface Strategy.
  • Context: Configurado com um objeto ConcreteStrategy e mantém uma referência a ele.

Benefícios: Oferece uma alternativa à herança, elimina declarações condicionais e proporciona uma escolha entre diferentes implementações.

7. O Padrão Observer: Estabelecendo Dependências para Atualizações Automáticas

Define uma dependência um-para-muitos entre objetos, de modo que quando um objeto muda de estado, todos os seus dependentes são notificados e atualizados automaticamente.

Mecanismo Publicar-Assinar. O padrão Observer define uma dependência um-para-muitos entre objetos, onde um sujeito notifica seus observadores sobre quaisquer mudanças em seu estado. Isso permite atualizações automáticas e mantém a consistência entre objetos relacionados.

Elementos-Chave:

  • Sujeito: Conhece seus observadores e oferece uma interface para adicioná-los e removê-los.
  • Observador: Define uma interface de atualização para objetos que devem ser notificados sobre mudanças no sujeito.
  • ConcreteSubject: Armazena o estado de interesse para os objetos ConcreteObserver e envia notificações quando seu estado muda.
  • ConcreteObserver: Mantém uma referência a um ConcreteSubject, armazena estado que deve permanecer consistente com o sujeito e implementa a interface de atualização do Observador.

Benefícios: Desacoplamento abstrato entre Sujeito e Observador, suporte à comunicação em broadcast e capacidade de variar sujeitos e observadores independentemente.

8. O Poder do Desacoplamento e da Abstração

Programe para uma interface, não para uma implementação.

Reduzindo Dependências. Desacoplamento e abstração são temas recorrentes em padrões de projeto. Ao minimizar dependências entre classes e programar para interfaces em vez de implementações concretas, os sistemas tornam-se mais flexíveis, reutilizáveis e fáceis de manter.

Benefícios do Desacoplamento:

  • Maior reutilização de classes isoladamente.
  • Facilidade para aprender, portar, modificar e estender um sistema.
  • Menor risco de mudanças em cascata quando uma classe é alterada.

Técnicas para Alcançar o Desacoplamento: Acoplamento abstrato, camadas e encapsulamento do conceito que varia. Essas técnicas são aplicadas em diversos padrões para promover sistemas fracamente acoplados.

9. Selecionando e Aplicando Padrões de Projeto de Forma Eficaz

Um padrão de projeto deve ser aplicado apenas quando a flexibilidade que ele oferece é realmente necessária.

Aplicação Contextual. Padrões de projeto não devem ser usados indiscriminadamente. São ferramentas para serem empregadas quando o problema específico que resolvem surge. Aplicar um padrão sem entender claramente seus benefícios e limitações pode gerar complexidade desnecessária e queda de desempenho.

Abordagens para Encontrar o Padrão Adequado:

  • Considere como os padrões resolvem problemas de design.
  • Leia as seções de Intenção.
  • Estude como os padrões se relacionam.
  • Analise padrões com propósitos semelhantes.
  • Examine causas de redesenho.
  • Reflita sobre o que deve ser variável no seu design.

Passos para Aplicar um Padrão de Projeto: Leia o padrão, estude sua estrutura, analise o código de exemplo, escolha nomes significativos, defina as classes, atribua nomes específicos para operações e implemente essas operações.

10. Padrões de Projeto como Linguagem Comum e Ferramenta de Aprendizado

Padrões de projeto fornecem um vocabulário comum para que designers comuniquem, documentem e explorem alternativas de design.

Aprimorando a Comunicação. Padrões de projeto oferecem um vocabulário compartilhado para discutir e documentar designs de software. Isso permite que desenvolvedores se comuniquem com mais clareza e compreendam sistemas existentes com maior facilidade.

Melhorando as Habilidades de Design. Aprender padrões de projeto acelera o desenvolvimento da expertise em design orientado a objetos. Eles oferecem soluções para problemas comuns e orientam designers a tomar decisões fundamentadas.

Complementando Métodos Existentes. Padrões de projeto não substituem métodos de design, mas são um complemento valioso. Eles ajudam a descrever o “porquê” de um design, e não apenas a registrar os resultados das decisões tomadas.

Última atualização:

FAQ

1. What is Design Patterns: Elements of Reusable Object-Oriented Software by Erich Gamma about?

  • Comprehensive design pattern catalog: The book systematically names, explains, and motivates 23 general design patterns that address recurring problems in object-oriented software development.
  • Focus on object-oriented design: It emphasizes how to use objects, inheritance, and polymorphism to create flexible, reusable, and maintainable software architectures.
  • Reusable solutions: Patterns are presented as proven, general arrangements of classes and objects that can be customized to solve specific design problems in various contexts.
  • Practical examples and case studies: The book includes real-world examples and a case study (Lexi editor) to illustrate how patterns are applied in practice.

2. Why should I read Design Patterns by Erich Gamma and others?

  • Shared design vocabulary: The book provides a common language for software designers, making it easier to communicate, document, and discuss complex system designs.
  • Expert knowledge transfer: It captures and distills expert design experience, helping both novices and experienced programmers improve their design skills more rapidly.
  • Facilitates software reuse and refactoring: The patterns guide the creation of reusable software components and serve as targets for refactoring, supporting software evolution.
  • Widely acclaimed resource: The book is praised for its clarity, practical value, and lasting impact on the field of software engineering.

3. What are the key takeaways from Design Patterns: Elements of Reusable Object-Oriented Software?

  • Patterns as reusable solutions: Design patterns provide elegant, time-tested solutions to common design problems, promoting code reuse and flexibility.
  • Three main pattern categories: Patterns are organized into Creational, Structural, and Behavioral types, each addressing different aspects of software design.
  • Design for change: The book emphasizes designing systems that are easy to extend and maintain by encapsulating variability and reducing coupling.
  • Principles over recipes: Rather than offering rigid templates, the book teaches principles and trade-offs, encouraging thoughtful application of patterns.

4. What are design patterns according to Design Patterns by Erich Gamma et al.?

  • Definition and purpose: A design pattern describes a recurring problem in a context and the core of its solution, enabling repeated use without duplication.
  • Four essential elements: Each pattern includes a name, a problem description, a solution outline (abstract, not concrete), and consequences (trade-offs and results).
  • Capturing design experience: Patterns distill key aspects of successful designs, including class roles, collaborations, and responsibilities, to facilitate reusable object-oriented design.

5. How are design patterns organized in Design Patterns: Elements of Reusable Object-Oriented Software?

  • Three main categories: Patterns are classified as Creational (object creation), Structural (class/object composition), and Behavioral (object communication).
  • Class vs. object scope: Patterns are further distinguished by whether they apply to classes (static, compile-time) or objects (dynamic, run-time).
  • Interrelated catalog: The book provides cross-references and diagrams to show how patterns relate, combine, or serve as alternatives to each other.

6. What are the main Creational, Structural, and Behavioral patterns in Design Patterns by Erich Gamma?

  • Creational patterns: Abstract Factory, Builder, Factory Method, Prototype, and Singleton focus on object creation mechanisms.
  • Structural patterns: Adapter, Bridge, Composite, Decorator, Facade, Flyweight, and Proxy address class and object composition.
  • Behavioral patterns: Chain of Responsibility, Command, Interpreter, Iterator, Mediator, Memento, Observer, State, Strategy, Template Method, and Visitor focus on communication and responsibility among objects.
  • Purpose of categories: Each category addresses a different set of recurring design challenges in object-oriented software.

7. What is the principle of "program to an interface, not an implementation" in Design Patterns by Erich Gamma?

  • Interface over implementation: Clients should depend on abstract interfaces (often defined by abstract classes) rather than concrete implementations to maximize flexibility.
  • Enables polymorphism: This principle allows objects of different classes to be used interchangeably if they share the same interface.
  • Supports decoupling: It reduces dependencies between components, making systems easier to extend and modify.
  • Creational pattern support: Patterns like Abstract Factory and Factory Method help instantiate objects without binding clients to specific classes.

8. How do inheritance and composition differ as reuse mechanisms in Design Patterns by Erich Gamma?

  • Inheritance (white-box reuse): Shares implementation via subclassing but exposes subclass to parent class internals, which can break encapsulation and limit flexibility.
  • Composition (black-box reuse): Assembles objects dynamically through well-defined interfaces, preserving encapsulation and allowing behavior to vary at run-time.
  • Design recommendation: The book advocates favoring object composition over class inheritance to keep designs flexible, focused, and reusable.
  • Pattern examples: Many patterns, such as Decorator and Strategy, leverage composition for greater adaptability.

9. How does delegation work in Design Patterns: Elements of Reusable Object-Oriented Software and which patterns use it?

  • Delegation concept: An object handles a request by delegating it to another object, similar to how subclasses defer to parent classes in inheritance.
  • Enables dynamic behavior: Delegation allows for dynamic composition of behavior at run-time, increasing flexibility.
  • Pattern usage: Key patterns using delegation include State, Strategy, Visitor, Mediator, Chain of Responsibility, and Bridge.
  • Benefits: Delegation supports encapsulation and makes it easier to change or extend object behavior without modifying existing code.

10. How does Design Patterns by Erich Gamma illustrate the use of patterns in a real application?

  • Lexi case study: The book presents Lexi, a WYSIWYG document editor, as a comprehensive example of pattern application.
  • Multiple patterns in action: Patterns such as Composite, Strategy, Decorator, Abstract Factory, Bridge, Command, Iterator, and Visitor are used to solve practical design problems.
  • Demonstrates pattern interaction: The case study shows how patterns can be combined and interact within a complex system.
  • Learning by example: This real-world scenario helps readers understand the practical value and implementation of design patterns.

11. What are some key Structural patterns in Design Patterns by Erich Gamma, and how do they work?

  • Decorator: Adds responsibilities to objects dynamically by wrapping them, avoiding subclass explosion and enabling flexible feature combinations.
  • Facade: Provides a unified, simplified interface to a complex subsystem, reducing dependencies and making systems easier to use.
  • Flyweight: Shares fine-grained objects efficiently by separating intrinsic (shared) and extrinsic (context-dependent) state, reducing memory usage.
  • Proxy: Acts as a surrogate or placeholder for another object, controlling access, deferring creation, or adding functionality transparently.

12. How do Behavioral patterns like Observer, State, and Visitor function in Design Patterns by Erich Gamma?

  • Observer: Establishes a one-to-many dependency so that when one object changes state, all its dependents are notified and updated automatically, promoting loose coupling.
  • State: Encapsulates state-specific behavior in separate objects, allowing an object to change its behavior when its internal state changes, and replacing complex conditionals.
  • Visitor: Separates operations from object structure, enabling new operations to be added without modifying element classes, using double dispatch for flexibility.
  • Pattern trade-offs: These patterns simplify communication, state management, and operation extension, but may introduce complexity or make adding new element types harder.

Avaliações

4.20 de 5
Média de 11.8K avaliações do Goodreads e da Amazon.

Design Patterns é amplamente reconhecido como uma obra fundamental na engenharia de software, ao introduzir o conceito de padrões de design para melhorar a reutilização e a manutenção do código. Embora alguns leitores o considerem seco e desatualizado, muitos elogiam seu catálogo abrangente de padrões e suas aplicações. O livro é considerado leitura essencial para programadores orientados a objetos, oferecendo insights valiosos para resolver problemas comuns de design. Críticos apontam que alguns padrões podem ser menos relevantes nas linguagens modernas, mas os princípios gerais continuam sendo importantes. O impacto da obra nas práticas de desenvolvimento de software é amplamente reconhecido.

Your rating:
4.64
26 avaliações

Sobre o autor

Erich Gamma é um destacado cientista da computação suíço, conhecido sobretudo por ter co-escrito o influente livro "Design Patterns: Elements of Reusable Object-Oriented Software". Esta obra, frequentemente apelidada de livro dos "Quatro Fantásticos", revolucionou a engenharia de software ao introduzir e catalogar padrões de design. As contribuições de Gamma moldaram de forma significativa as práticas modernas de programação orientada a objetos e a arquitetura de software. O seu trabalho foi amplamente adotado na indústria e é ensinado em cursos de ciência da computação por todo o mundo. Para além disso, Gamma participou no desenvolvimento de outros projetos de software notáveis e continuou a influenciar o campo da engenharia de software ao longo da sua carreira.

Listen
Now playing
Design Patterns
0:00
-0:00
Now playing
Design Patterns
0:00
-0:00
Voice
Speed
Dan
Andrew
Michelle
Lauren
1.0×
+
200 words per minute
Queue
Home
Library
Get App
Create a free account to unlock:
Requests: Request new book summaries
Bookmarks: Save your favorite books
History: Revisit books later
Recommendations: Personalized for you
Ratings: Rate books & see your ratings
100,000+ readers
Try Full Access for 7 Days
Listen, bookmark, and more
Compare Features Free Pro
📖 Read Summaries
All summaries are free to read in 40 languages
🎧 Listen to Summaries
Listen to unlimited summaries in 40 languages
❤️ Unlimited Bookmarks
Free users are limited to 4
📜 Unlimited History
Free users are limited to 4
📥 Unlimited Downloads
Free users are limited to 1
Risk-Free Timeline
Today: Get Instant Access
Listen to full summaries of 73,530 books. That's 12,000+ hours of audio!
Day 4: Trial Reminder
We'll send you a notification that your trial is ending soon.
Day 7: Your subscription begins
You'll be charged on Jun 12,
cancel anytime before.
Consume 2.8x More Books
2.8x more books Listening Reading
Our users love us
100,000+ readers
"...I can 10x the number of books I can read..."
"...exceptionally accurate, engaging, and beautifully presented..."
"...better than any amazon review when I'm making a book-buying decision..."
Save 62%
Yearly
$119.88 $44.99/year
$3.75/mo
Monthly
$9.99/mo
Start a 7-Day Free Trial
7 days free, then $44.99/year. Cancel anytime.
Scanner
Find a barcode to scan

Settings
General
Widget
Loading...