SlideShare a Scribd company logo
Design Pattern Zoology

 Taxonomy and Field Guide of
  Common Design Patterns


                       Josh Adell <josh.adell@gmail.com>
                                               20120719
@josh_adell

• Software developer: PHP, Javascript, SQL
• http://www.dunnwell.com
• http://joshadell.com

• http://mojolive.com/profile/joshadell

• http://github.com/jadell/neo4jphp
• http://frostymug.herokuapp.com
Play Along



http://github.com/jadell/dpzoology
Coming Soon...

• What are design patterns?
• Why design patterns?
• Common design patterns with examples
Stages of OOP




     Larva
Stages of OOP




     Pupa
Stages of OOP




     Adult
Design Patterns Are

• General solutions to common problems
• Architectural templates
• Named approaches to code structure
Design Patterns Are Not

• Off-the-shelf solutions
• One-size-fits-all panacea
Anti-patterns

• Poorly or inappropriately used patterns
• Increase code complexity and/or fragility
Why use design patterns?

•   Proven solutions
•   Simplify code structure
•   Promote loose coupling, high cohesion
•   Enhance testing/testability


Design Patterns are where the power of OOP comes from
SOLID Principles

•   Single Responsibility
•   Open/Closed
•   Liskov Substitution
•   Interface Segregation
•   Dependency Inversion
Common Themes

•   Code to an Interface, not an Implementation
•   One class == one responsibility
•   Favor Compostion over Inheritance
•   Replace branching with polymorphism
•   Low coupling, high cohesion
Types of Patterns

• Architectural        • Code
  o Client-Server        o Adapter
  o Cloud                o Chain-of-Command
                         o Command
• Application            o Decorator
  o MVC                  o Delegate
  o Services             o Factory
  o Message Queue        o Flyweight
                         o Observer
• UX                     o Singleton
  o Call to Action       o Strategy
  o Progressive          o Visitor
    disclosure
Let's get started!
Strategy

•   Define a family of behaviors
•   Each behavior is accessed via a common interface
•   Client code doesn't care which behavior it uses
•   Behaviors can be shared across class hierarchies
Delegate

• Delegator passes a request to a helper (the delegate)
• Delegate handles request, passes result back
• Delegator passes result back to caller
Decorator

•   Add behaviors to a base object dynamically
•   Base decorator passes through unmodified
•   Decorators that modify requests or responses
•   Decorators wrap a base object or decorator
Chain-of-Responsibility

• Dispatcher calls a handler, that calls a handler...
• Each handler responsible for passing to next
• Stop when event is handled
Observer

• Publish-subscribe
• Broadcast an event, all observers catch and handle
• Broadcaster doesn't care about observers
Patterns derive from each other

• Delegate is based on Strategy
• CoR is a string of Delegates that call each other
• Decorator & Observer are CoR that always run to the end
Wrap Up

• More patterns out there: Command, Facade, Pool,
  Mediator, Visitor, Adapter
• Use this vocabulary during technical discussions
• Refactor spaghetti and long-winded code
• Decrease coupling, increase cohesion!
Good References

• http://www.oodesign.com
• Gang of Four - Gamma, Helm, Johnson, Vlissides
• Head-First Design Patterns
Questions?

More Related Content

PPTX
Babysitting your orm essenmacher, adam
PPTX
Software development fundamentals
PPTX
MediaEval 2018: Baseline Algorithms for Predicting the Interest in News
PPTX
Automated Testing with Databases
PPTX
Real life unit testing tools and practices
PPTX
Zoology Related Software
PDF
Zoology
Babysitting your orm essenmacher, adam
Software development fundamentals
MediaEval 2018: Baseline Algorithms for Predicting the Interest in News
Automated Testing with Databases
Real life unit testing tools and practices
Zoology Related Software
Zoology

Viewers also liked (7)

PPTX
PPTX
Uses of computer
PPTX
Uses of computer in various fields of life
PPT
Uses of computers in education
PPTX
Uses of computer
PPT
Uses of computer in various fields
PPT
Uses of Computers in Education
Uses of computer
Uses of computer in various fields of life
Uses of computers in education
Uses of computer
Uses of computer in various fields
Uses of Computers in Education
Ad

Similar to Design Pattern Zoology (20)

PPTX
Clean code presentation
PPTX
Segue to design patterns
PPTX
Online TechTalk  "Patterns in Embedded SW Design"
PDF
Orthogonality: A Strategy for Reusable Code
PPTX
Eurosport's Kodakademi #2
PPTX
TDD and the Legacy Code Black Hole
PDF
SE2016 Java Alex Theedom "Java EE revisits design patterns"
PDF
Alex Theedom Java ee revisits design patterns
PDF
[DevDay 2016] Design Pattern at a glance - Speaker: Tuan Do – Scrum Master a...
PPTX
Software Engineering - Trends & Industry Practices
PPT
Design Patterns .Net
PPTX
Improving the Design of Existing Software
PDF
Scala Bay Meetup - The state of Scala code style and quality
KEY
"SOLID" Object Oriented Design Principles
PDF
Evolutionary Design - NewCrafts Paris 18 May 2018
PPTX
Solid Principles Of Design (Design Series 01)
PPTX
Design patterns and MV
PPTX
Design p atterns
PDF
Deployment is the new build
PPTX
Software Design
Clean code presentation
Segue to design patterns
Online TechTalk  "Patterns in Embedded SW Design"
Orthogonality: A Strategy for Reusable Code
Eurosport's Kodakademi #2
TDD and the Legacy Code Black Hole
SE2016 Java Alex Theedom "Java EE revisits design patterns"
Alex Theedom Java ee revisits design patterns
[DevDay 2016] Design Pattern at a glance - Speaker: Tuan Do – Scrum Master a...
Software Engineering - Trends & Industry Practices
Design Patterns .Net
Improving the Design of Existing Software
Scala Bay Meetup - The state of Scala code style and quality
"SOLID" Object Oriented Design Principles
Evolutionary Design - NewCrafts Paris 18 May 2018
Solid Principles Of Design (Design Series 01)
Design patterns and MV
Design p atterns
Deployment is the new build
Software Design
Ad

Recently uploaded (20)

PPTX
MYSQL Presentation for SQL database connectivity
PDF
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
PDF
Encapsulation theory and applications.pdf
PPT
“AI and Expert System Decision Support & Business Intelligence Systems”
PDF
Empathic Computing: Creating Shared Understanding
PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
PDF
Assigned Numbers - 2025 - Bluetooth® Document
PDF
Chapter 3 Spatial Domain Image Processing.pdf
PDF
NewMind AI Weekly Chronicles - August'25-Week II
PDF
A comparative analysis of optical character recognition models for extracting...
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
PDF
The Rise and Fall of 3GPP – Time for a Sabbatical?
PDF
Review of recent advances in non-invasive hemoglobin estimation
PDF
cuic standard and advanced reporting.pdf
PDF
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
PDF
Network Security Unit 5.pdf for BCA BBA.
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PPTX
sap open course for s4hana steps from ECC to s4
MYSQL Presentation for SQL database connectivity
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
Encapsulation theory and applications.pdf
“AI and Expert System Decision Support & Business Intelligence Systems”
Empathic Computing: Creating Shared Understanding
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
Assigned Numbers - 2025 - Bluetooth® Document
Chapter 3 Spatial Domain Image Processing.pdf
NewMind AI Weekly Chronicles - August'25-Week II
A comparative analysis of optical character recognition models for extracting...
Mobile App Security Testing_ A Comprehensive Guide.pdf
Advanced methodologies resolving dimensionality complications for autism neur...
The Rise and Fall of 3GPP – Time for a Sabbatical?
Review of recent advances in non-invasive hemoglobin estimation
cuic standard and advanced reporting.pdf
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
Network Security Unit 5.pdf for BCA BBA.
Building Integrated photovoltaic BIPV_UPV.pdf
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
sap open course for s4hana steps from ECC to s4

Design Pattern Zoology

  • 1. Design Pattern Zoology Taxonomy and Field Guide of Common Design Patterns Josh Adell <josh.adell@gmail.com> 20120719
  • 2. @josh_adell • Software developer: PHP, Javascript, SQL • http://www.dunnwell.com • http://joshadell.com • http://mojolive.com/profile/joshadell • http://github.com/jadell/neo4jphp • http://frostymug.herokuapp.com
  • 4. Coming Soon... • What are design patterns? • Why design patterns? • Common design patterns with examples
  • 8. Design Patterns Are • General solutions to common problems • Architectural templates • Named approaches to code structure
  • 9. Design Patterns Are Not • Off-the-shelf solutions • One-size-fits-all panacea
  • 10. Anti-patterns • Poorly or inappropriately used patterns • Increase code complexity and/or fragility
  • 11. Why use design patterns? • Proven solutions • Simplify code structure • Promote loose coupling, high cohesion • Enhance testing/testability Design Patterns are where the power of OOP comes from
  • 12. SOLID Principles • Single Responsibility • Open/Closed • Liskov Substitution • Interface Segregation • Dependency Inversion
  • 13. Common Themes • Code to an Interface, not an Implementation • One class == one responsibility • Favor Compostion over Inheritance • Replace branching with polymorphism • Low coupling, high cohesion
  • 14. Types of Patterns • Architectural • Code o Client-Server o Adapter o Cloud o Chain-of-Command o Command • Application o Decorator o MVC o Delegate o Services o Factory o Message Queue o Flyweight o Observer • UX o Singleton o Call to Action o Strategy o Progressive o Visitor disclosure
  • 16. Strategy • Define a family of behaviors • Each behavior is accessed via a common interface • Client code doesn't care which behavior it uses • Behaviors can be shared across class hierarchies
  • 17. Delegate • Delegator passes a request to a helper (the delegate) • Delegate handles request, passes result back • Delegator passes result back to caller
  • 18. Decorator • Add behaviors to a base object dynamically • Base decorator passes through unmodified • Decorators that modify requests or responses • Decorators wrap a base object or decorator
  • 19. Chain-of-Responsibility • Dispatcher calls a handler, that calls a handler... • Each handler responsible for passing to next • Stop when event is handled
  • 20. Observer • Publish-subscribe • Broadcast an event, all observers catch and handle • Broadcaster doesn't care about observers
  • 21. Patterns derive from each other • Delegate is based on Strategy • CoR is a string of Delegates that call each other • Decorator & Observer are CoR that always run to the end
  • 22. Wrap Up • More patterns out there: Command, Facade, Pool, Mediator, Visitor, Adapter • Use this vocabulary during technical discussions • Refactor spaghetti and long-winded code • Decrease coupling, increase cohesion!
  • 23. Good References • http://www.oodesign.com • Gang of Four - Gamma, Helm, Johnson, Vlissides • Head-First Design Patterns

Editor's Notes

  • #6: * Use classes to hold data structures together * Logic is procedural * Ask for data, but operates on data outside of where the data resides * Rules are hard-coded * Stage 0: Egg, all code is procedural, global state, arrays/scalars for data
  • #7: * Use classes to hold data structures together, and provide behaviors for maintaining the data * Ensure data integrity * Most logic is still procedural, hard-coded
  • #8: * Use classes to hold data structures together, and provide behaviors for maintaining the data * Objects also represent behavior, not just data * Logic comes from the interaction of objects via contracts/interfaces * Behavior emerges from interactions, not predetermined rules
  • #9: * Gang of Four * Best practices
  • #10: * No one-size-fits-all * Require forethought to determine which pattern is appropriate * No excuse for poorly designed code
  • #11: * pre-mature optimization * misunderstood refactoring * Any pattern taken to an extreme can become an anti-pattern
  • #12: * Provide a common vocabulary for discussing architecture * Simplicity through code re-use * Coupling: unnecessary linking of one component to another.  Hard to change one without changing the other. * Solve by coding to an interface! * Cohesion: component parts fit together in logical, narrowly-defined ways. * One class or method = one responsibility
  • #13: * An object has only one responsibility * Objects are open for extension but closed for modification * Any entity can be replaced by a sub-type of that entity (or one that meets the same contract) * Many specific interfaces are better than one general interface * Depend on contracts/interfaces, not concrete instantiations
  • #14: * themes that underly all the design patterns * at least the ones we&apos;re going to talk about * De-coupling * Tight cohesion * small classes and methods are easier to work with than large ones * easier to debug * easier to test! * Dependency Injection * Objects create objects or do business logic, not both
  • #15: * architectural: how systems fit together, interact * application: how code systems are divided, layered * Code: how code logic is divided, behaves and interacts * Common to all: how bits of a system talk to each other, pass information (code, servers, users) * You&apos;ve probably used these patterns without knowing it, or knowing their names
  • #16: * Next slides:    * Introduce a pattern     * Concept     * When to use   * Show an example
  • #17: * Very common pattern, can be seen as the basis for many other patterns * If you learn only one, learn this one! * Each behavior is its own class * Behavior can be selected and changed at runtime * Behavior not tied to client * Composition over inheritance! * Unit testing tip: pass in a mock strategy to test that client calls it correctly Use when: * behavior needed across multiple classes/heirarchies * behavior needs to change dynamically
  • #18: * Strategy&apos;s brother * Code sample-1 * Code sample-2 Use when: * Single object has a wide interface
  • #19: * Classis example is ordering pizza, coffee, car options * Notice that no decorator knows if it&apos;s talking to a decorator or the base object. * Can unit test decorator by passing in a mock base, know it will work on any decorator or base in the family * Code sample-3 Use when: * Behaviors are conditional * Behaviors are chained * Order (probably) doesn&apos;t matter
  • #20: * Also see this called &amp;quot;Chain of Command&amp;quot; * I used to call it this, but saw people get it confused with the actual &amp;quot;Command&amp;quot; pattern * Dispatcher only knows the first handler * Dispatcher doesn&apos;t care who handled the event, only that it was or was not handled * Handlers handle their own errors internally, should not affect dispatcher or any other handler * Code sample-4 * Code sample-5 Use when: * More than one way to handle an event * How it&apos;s handled doesn&apos;t matter; just that it is handled or not
  • #21: * Broadcast is an event and any associated parameters * Subscribers can request only to hear about specific events * Subscribers must cleanup after themselves, handle their own failure * Decouples generation of event from its handling * Doctrine * Javascript in general * Code sample-6 Use when: * Event triggers many independent behaviors * Event generator doesn&apos;t care about results * State changes need to be known by many objects
  • #22: * Said before, if you only learn one, learn Strategy. * All other can be derived from it