Design Patterns

Download Report

Transcript Design Patterns

Design Patterns
Trends and Case Study
John Hurst
June 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.
*
Component
+Operation()
-component
ConcreteComponent
+Operation()
Decorator
component->Operation()
+Operation()
1
ConcreteDecoratorA
ConcreteDecoratorB
-addedState
+Operation()
+AddedBehaviour()
+Operation()
Decorator::Operation();
AddedBehaviour()'
Application of Decorator
• Apache Commons
DBCP (Database
Connection Pooling)
«interface»
Connection
+createStatement()
+prepareStatement()
+prepareCall()
+commit()
+rollback()
+close()
*
DelegatingConnection
-_conn
+createStatement()
+prepareStatement()
+prepareCall()
+commit()
+rollback()
+close()
PoolableConnection
-_pool
+close()
1
PoolingConnection
-_pstmtPool
+prepareStatement()
+close()
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
Many patterns look similar structurally, but have different intent
Proxy
Decorator
«interface»
Subject
+Request()
«interface»
Component
+Operation()
-component
ConcreteComponent
+Operation()
RealSubject
+Request()
Proxy
+Request()
...
realSubject->Request()
...
Decorator
component->Operation()
+Operation()
ConcreteDecoratorA
ConcreteDecoratorB
-addedState
+Operation()
+AddedBehaviour()
+Operation()
Decorator::Operation();
AddedBehaviour()'
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