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.
Application of Decorator Apache Commons DBCP (Database Connection Pooling)
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 (2 nd Ed) – Addison-Wesley 2003
Web Sites Martin Fowler website Portland Pattern Repository TheServerSide Microsoft Patterns and Practices /patterns/ /patterns/
Relationships and Similarities ProxyDecorator 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