Design Patterns
Trends and Case Study
John HurstJune 2005
Overview
• Software Patterns• Design Patterns• Topics• Case Study / Examples
Introduction
• Christopher Alexander– A Pattern Language: Towns, Buildings, Construction
(1977)– A Timeless Way of Building (1979)
• “Gang of Four” (Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides)– Design Patterns (1995)
• Buschmann et al– Pattern Oriented Software Construction (1996)
Key Idea
• A Software Pattern is:– A solution– To a problem– In a context– With consequences
• A Software Pattern has a name and a vocabulary.
Pattern Languages
• Intent• Also Known As• Motivation• Applicability• Structure• Participants
• Collaborations• Consequences• Implementation• Known Uses• Related Patterns
OO Design Principles
• Code to interfaces• Prefer composition to inheritance• Encapsulate what varies
Benefits
• Improves thinking about OO design– New designs– Existing designs– Helps us realise the benefits of OO
• Reuse of solutions to common problems– Catalogs
• Communication tool– Common vocabulary
Example: Iterator
• Intent: – Provide a way to access the elements of
an aggregate object sequentially without exposing its underlying representation
Example: Decorator
• Intent: – Attach additional responsibilities to an object
dynamically. Decorators provide a flexible alternative to subclassing for extending functionality.
+Operation()
ConcreteComponent
+Operation()
Decorator-component
1
*
+Operation()
-addedState
ConcreteDecoratorA
+Operation()+AddedBehaviour()
ConcreteDecoratorB
component->Operation()
Decorator::Operation();AddedBehaviour()'
+Operation()
Component
Application of Decorator
• Apache Commons DBCP (Database Connection Pooling)
+createStatement()+prepareStatement()+prepareCall()+commit()+rollback()+close()
«interface»Connection
+createStatement()+prepareStatement()+prepareCall()+commit()+rollback()+close()
-_conn
DelegatingConnection
1
*
+close()
-_pool
PoolableConnection
+prepareStatement()+close()
-_pstmtPool
PoolingConnection
Patterns Landscape
• Architectural Patterns• Analysis Patterns• Design Patterns
“Platform Patterns”
• J2EE Core Patterns• MS Building Blocks
• Contrast with PEAA
Antipatterns
• Examples– Big Ball Of Mud– Copy and Paste Programming– Magic Container– Tower of Voodoo
Broken Patterns
• Double checked locking• “Deprecated” Patterns:
– Factory Method (due to confusion over what it means)
– Bridge– Flyweight– Interpreter
Specialised Fields
• Real-time• Concurrency• Enterprise• Messaging• Analysis
Refactoring to Patterns
• Remove duplicate code• Simplify logic• Communicate intention• Increase flexibility
Pattern Happy
Patterns with Programming Languages
• Strategy– C++ templates: static type checking– Java interfaces and objects: runtime
configuration– Ruby/Smalltalk blocks: idiomatic usage
Case Study: HHRDM
• Design Patterns• Architectural Patterns• Analysis Patterns
Design Patterns
• Abstract Factory• Template Method• Strategy• Façade• Proxy
Architectural Patterns
• Layering• Data Access Patterns• Domain Model• Service Façade
Analysis Patterns
• Temporal Patterns– Effectivity– Snapshot– Temporal Object– Temporal Property– Audit Trail– Bitemporal Model
References• Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides
Design Patterns: Elements of Reusable Object-Oriented Software – Addison-Wesley 1995
• Frank Buschmann, Regine Meunier, Hans Rohnert, Peter Sommerlad, Michael Stal Pattern-Oriented Software Architecture Wiley 1996
• Martin Fowler Patterns of Enterprise Application Architecture – Addison-Wesley 2002
• Martin Fowler Refactoring – Addison-Wesley 2000• Martin Fowler Analysis Patterns – Addison Wesley 1996• Gregor Hohpe, Bobby Woolfe Patterns of Enterprise
Application Integration – Addison-Wesley 2003• Joshua Kerievsky Refactoring to Patterns – Addison-Wesley
2004• Deepak Alur, John Crupi, Dan Malks Core J2EE Patterns (2nd
Ed) – Addison-Wesley 2003
Web Sites
• Martin Fowler website http://www.martinfowler.com
• Portland Pattern Repository http://c2.com/cgi/wiki
• TheServerSide http://www.theserverside.com
• Microsoft Patterns and Practices http://msdn.microsoft.com/architecture/patterns/
Relationships and Similarities
+Request()
«interface»Subject
+Request()
Proxy
+Request()
RealSubject ...realSubject->Request()...
+Operation()
ConcreteComponent
+Operation()
Decorator-component
+Operation()
-addedState
ConcreteDecoratorA
+Operation()+AddedBehaviour()
ConcreteDecoratorB
component->Operation()
Decorator::Operation();AddedBehaviour()'
+Operation()
«interface»Component
Proxy Decorator
Many patterns look similar structurally, but have different intent
The Agile Manifesto
• Preferences:– Inidividuals and interactions over
processes and tools– Working software over comprehensive
documentation– Customer collaboration over contract
negotiation– Responding to change over following a
plan