Your SlideShare is downloading. ×
Design patterns cheat sheet
Upcoming SlideShare
Loading in...5

Thanks for flagging this SlideShare!

Oops! An error has occurred.

Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Design patterns cheat sheet


Published on

  • Be the first to comment

No Downloads
Total Views
On Slideshare
From Embeds
Number of Embeds
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

No notes for slide


  • 1. #8 Get More Refcarz! Visit CONTENTS INCLUDE: Chain of Responsibility Design Patterns n n Command n Interpreter n Iterator n Mediator n Observer By Jason McDonald n Template Method and more... Example ABOUT DESIGN PATTERNS Exception handling in some languages implements this pattern. When an exception is thrown in a method the runtime checks to This Design Patterns refcard provides a quick reference to see if the method has a mechanism to handle the exception or the original 23 Gang of Four design patterns, as listed in the if it should be passed up the call stack. When passed up the call book Design Patterns: Elements of Reusable Object-Oriented stack the process repeats until code to handle the exception is Software. Each pattern includes class diagrams, explanation, encountered or until there are no more parent objects to hand usage information, and a real world example. the request to. Creational Patterns: Used to construct objects such that COMMAND Object Behavioral they can be decoupled from their implementing system. Structural Patterns: Used to form large object structures Client Invoker between many disparate objects. ConcreteCommand Behavioral Patterns: Used to manage algorithms, +execute( ) relationships, and responsibilities between objects. Object Scope: Deals with object relationships that can be Command Receiver +execute ( ) changed at runtime. Class Scope: Deals with class relationships that can be changed Purpose at compile time. Encapsulates a request allowing it to be treated as an object. This allows the request to be handled in traditionally object C Abstract Factory S Decorator C Prototype based relationships such as queuing and callbacks. S Adapter S Facade S Proxy Use When S Bridge C Factory Method B Observer You need callback functionality. n C Builder S Flyweight C Singleton Requests need to be handled at variant times or in variant orders. n B Chain of B Interpreter B State A history of requests is needed. n Responsibility B Iterator B Strategy The invoker should be decoupled from the object handling the n B Command B Mediator B Template Method invocation. S Composite B Memento B Visitor Example Job queues are widely used to facilitate the asynchronous CHAIN OF RESPONSIBILITY Object Behavioral processing of algorithms. By utilizing the command pattern the functionality to be executed can be given to a job queue for successor processing without any need for the queue to have knowledge of the actual implementation it is invoking. The command object <<interface>> that is enqueued implements its particular algorithm within the Client Handler confines of the interface the queue is expecting. +handlerequest( ) tech facts at your fingertips Get More Refcardz ConcreteHandler 1 ConcreteHandler 2 (They’re free!) +handlerequest( ) +handlerequest( )Design Patterns n Authoritative content Purpose n Designed for developers Gives more than one object an opportunity to handle a request n Written by top experts by linking receiving objects together. Latest tools & technologies Parameters and Descriptions Method Name a URL open a connection to open(method, url, async) Hot method = HTTP verb url = url to open, may (GET, POST, etc.) async = whether to make include querystring asynchronous request Tip n as callback (similar to onclick, assign a function object onreadystatechange event model) onload, etc. in browser Hot tips & examples your fingertips tech facts at request add a header to the HTTP Use When setRequestHeader (namevalue) send(body) send the request body = string to be used as request body for the response n stop the XHR from listening abort() (only populated after send() stage in lifecycle of response Bonus content online readyState is called) after (integer, only populated Multiple objects may handle a request and the handler The HTTP return code loaded state) n httpStatus response reaches the set after JavaScript string (only n responseText body of response as a response reaches the interactive readyState) (only as a XML document object body of the response responseXML the interactive readyState) set after response reaches New issue every 1-2 weeks by name read a response header doesn’t have to be a specific object. getResponseHeader (name) getAllResponseHeade rs() Get an array of all response header names n A set of objects should be able to handle a request with the n handler determined at runtime. Subscribe Now for FREE! A request not being handled is an acceptable potential n outcome. DZone, Inc. |
  • 2. 2 Design Patterns tech facts at your fingertips INTERPRETER Class Behavioral MEDIATOR Object Behavioral Client informs Mediator <<interface>> Colleague <<interface>> Context AbstractExpression +interpret( ) ◆ TerminalExpression NonterminalExpression updates ConcreteMediator ConcreteColleague +interpret( ) : Context +interpret( ) : Context PurposePurpose Allows loose coupling by encapsulating the way disparate sets ofDefines a representation for a grammar as well as a mechanism objects interact and communicate with each other. Allows for theto understand and act upon the grammar. actions of each object set to vary independently of one another.Use When Use When There is grammar to interpret that can be represented asn Communication between sets of objects is well defined n large syntax trees. and complex. The grammar is simple.n Too many relationships exist and common point of control n Efficiency is not important.n or communication is needed. Decoupling grammar from underlying expressions is desired.n ExampleExample Mailing list software keeps track of who is signed up to theText based adventures, wildly popular in the 1980’s, provide mailing list and provides a single point of access through whicha good example of this. Many had simple commands, such any one person can communicate with the entire list. Withoutas “step down” that allowed traversal of the game. These a mediator implementation a person wanting to send a mes-commands could be nested such that it altered their meaning.For example, “go in” would result in a different outcome than sage to the group would have to constantly keep track of who“go up”. By creating a hierarchy of commands based upon was signed up and who was not. By implementing the mediatorthe command and the qualifier (non-terminal and terminal pattern the system is able to receive messages from any pointexpressions) the application could easily map many command then determine which recipients to forward the message on to,variations to a relating tree of actions. without the sender of the message having to be concerned with the actual recipient list. ITERATOR Object Behavioral MEMENTO Object Behavioral Client <<interface>> <<interface>> Memento Aggregate Iterator Caretaker -state +createIterator( ) +next( ) Concrete Aggregate ConcreteIterator Originator +createIterator( ) : Context +next ( ) : Context -state +setMemento(in m : Memento)Purpose +createMemento( )Allows for access to the elements of an aggregate object Purposewithout allowing access to its underlying representation. Allows for capturing and externalizing an object’s internalUse When state so that it can be restored later, all without violating Access to elements is needed without access to the entiren encapsulation. representation. Multiple or concurrent traversals of the elements are needed.n Use When A uniform interface for traversal is needed.n The internal state of an object must be saved and restored n Subtle differences exist between the implementation detailsn at a later time. of various iterators. Internal state cannot be exposed by interfaces without exposing n implementation.Example Encapsulation boundaries must be preserved. n The Java implementation of the iterator pattern allows users totraverse various types of data sets without worrying about the Exampleunderlying implementation of the collection. Since clients simply Undo functionality can nicely be implemented using theinteract with the iterator interface, collections are left to define memento pattern. By serializing and deserializing the state ofthe appropriate iterator for themselves. Some will allow full ac- an object before the change occurs we can preserve a snapshotcess to the underlying data set while others may restrict certain of it that can later be restored should the user choose to undofunctionalities, such as removing items. the operation. DZone, Inc. |
  • 3. 3 Design Patterns tech facts at your fingertips OBSERVER Object Behavioral STRATEGY Object Behavioral <<interface>> Context ◆ Subject notifies <<interface>> +attach(in o : Observer) Observer <<interface>> +detach(in o : Observer) Strategy +notify( ) +update( ) +execute( ) ConcreteStrategyA ConcreteStrategyB ConcreteSubject ConcreteObserver observes +execute( ) +execute( ) -subjectState -observerState +update ( ) PurposePurpose Defines a set of encapsulated algorithms that can be swappedLets one or more objects be notified of state changes in other to carry out a specific behavior.objects within the system. Use WhenUse When The only difference between many related classes is their n State changes in one or more objects should trigger behaviorn behavior. in other objects Multiple versions or variations of an algorithm are required. n Broadcasting capabilities are required.n Algorithms access or utilize data that calling code shouldn’t n An understanding exists that objects will be blind to then be exposed to. expense of notification. The behavior of a class should be defined at runtime. n Example Conditional statements are complex and hard to maintain. n This pattern can be found in almost every GUI environment. ExampleWhen buttons, text, and other fields are placed in applications When importing data into a new system different validationthe application typically registers as a listener for those controls. algorithms may be run based on the data set. By configuring theWhen a user triggers an event, such as clicking a button, the import to utilize strategies the conditional logic to determinecontrol iterates through its registered observers and sends anotification to each. what validation set to run can be removed and the import can be decoupled from the actual validation code. This will allow us to dynamically call one or more strategies during the import. STATE Object Behavioral TEMPLATE METHOD Class Behavioral Context ◆ +request ( ) <<interface>> AbstractClass State +templateMethod( ) +handle( ) #subMethod( ) ConcreteClass ConcreteState 1 ConcreteState 2 +subMethod( ) +handle ( ) +handle ( ) PurposePurpose Identifies the framework of an algorithm, allowing implementingTies object circumstances to its behavior, allowing the object classes to define the actual behave in different ways based upon its internal state. Use WhenUse When A single abstract implementation of an algorithm is needed. n The behavior of an object should be influenced by its state.n Common behavior among subclasses should be localized to a n Complex conditions tie object behavior to its state.n common class. Transitions between states need to be explicit.n Parent classes should be able to uniformly invoke behavior in n Example their subclasses.An email object can have various states, all of which will Most or all subclasses need to implement the behavior. n change how the object handles different functions. If the state Exampleis “not sent” then the call to send() is going to send the message A parent class, InstantMessage, will likely have all the methodswhile a call to recallMessage() will either throw an error or donothing. However, if the state is “sent” then the call to send() required to handle sending a message. However, the actualwould either throw an error or do nothing while the call to serialization of the data to send may vary depending on therecallMessage() would attempt to send a recall notification implementation. A video message and a plain text messageto recipients. To avoid conditional statements in most or all will require different algorithms in order to serialize the datamethods there would be multiple state objects that handle the correctly. Subclasses of InstantMessage can provide theirimplementation with respect to their particular state. The calls own implementation of the serialization method, allowing thewithin the Email object would then be delegated down to the parent class to work with them without understanding theirappropriate state object for handling. implementation details. DZone, Inc. |
  • 4. 4 Design Patterns tech facts at your fingertips VISITOR Object Behavioral BRIDGE Object Structural <<interface>> Abstraction ◆ Visitor Client +operation( ) <<interface>> +visitElementA(in a : ConcreteElementA) Implementor +visitElementB(in b : ConcreteElementB) <<interface>> +operationImp( ) Element ConcreteVisitor +accept(in v : Visitor) +visitElementA(in a : ConcreteElementA) ConcreteImplementorA ConcreteImplementorB +visitElementB(in b : ConcreteElementB) +operationImp( ) +operationImp( ) ConcreteElementA +accept(in v : Visitor) ConcreteElementB Purpose +accept(in v : Visitor) Defines an abstract object structure independently of the implementation object structure in order to limit coupling.PurposeAllows for one or more operations to be applied to a set of objects Use Whenat runtime, decoupling the operations from the object structure. Abstractions and implementations should not be bound at n compile time.Use When Abstractions and implementations should be independently n An object structure must have many unrelated operationsn extensible. performed upon it. Changes in the implementation of an abstraction should n The object structure can’t change but operations performedn have no impact on clients. on it can. Implementation details should be hidden from the client. n Operations must be performed on the concrete classes of ann Example object structure. The Java Virtual Machine (JVM) has its own native set of functions Exposing internal state or operations of the object structuren that abstract the use of windowing, system logging, and byte is acceptable. code execution but the actual implementation of these functions Operations should be able to operate on multiple objectn is delegated to the operating system the JVM is running on. structures that implement the same interface sets. When an application instructs the JVM to render a window itExample delegates the rendering call to the concrete implementationCalculating taxes in different regions on sets of invoices would of the JVM that knows how to communicate with the operatingrequire many different variations of calculation logic. Implementing system in order to render the window.a visitor allows the logic to be decoupled from the invoices andline items. This allows the hierarchy of items to be visited by cal- COMPOSITE Object Structuralculation code that can then apply the proper rates for the region.Changing regions is as simple as substituting a different visitor. <<interface>> Component children ADAPTER Class and Object Structural +operation( ) +add(in c : Component ) +remove(in c : Component ) +getChild(in i : int) <<interface>> Adapter Client +operation( ) Component Leaf +operation( ) +operation( ) +add(in c : Component ) ConcreteAdapter +remove(in c : Component ) Adaptee -adaptee +getChild(in i : int) +operation( ) +adaptedOperation ( ) PurposePurpose Facilitates the creation of object hierarchies where each objectPermits classes with disparate interfaces to work together by can be treated independently or as a set of nested objectscreating a common object by which they may communicate through the same interface.and interact. Use WhenUse When Hierarchical representations of objects are needed.. n A class to be used doesn’t meet interface requirements.n Objects and compositions of objects should be treated uniformly. n Complex conditions tie object behavior to its state.n Example Transitions between states need to be explicit.n Sometimes the information displayed in a shopping cart is theExample product of a single item while other times it is an aggregationA billing application needs to interface with an HR application in of multiple items. By implementing items as composites we canorder to exchange employee data, however each has its own inter- treat the aggregates and the items in the same way, allowing usface and implementation for the Employee object. In addition, the to simply iterate over the tree and invoke functionality on eachSSN is stored in different formats by each system. By creating an item. By calling the getCost() method on any given node weadapter we can create a common interface between the two appli- would get the cost of that item plus the cost of all child items,cations that allows them to communicate using their native objects allowing items to be uniformly treated whether they were singleand is able to transform the SSN format in the process. items or groups of items. DZone, Inc. |
  • 5. 5 Design Patterns tech facts at your fingertips DECORATOR Object Structural FLYWEIGHT Object Structural <<interface>> ConcreteComponent FlyweightFactory <<interface>> Component Flyweight ◆ +operation( ) +getFlyweight(in key) +operation ( ) +operation( in extrinsicState) Decorator Client +operation( ) ConcreteDecorator ConcreteFlyweight -addedState -intrinsicState UnsharedConcreteFlyweight +operation ( ) +operation ( in extrinsicState) -allState +addedBehavior ( ) +operation ( in extrinsicState)Purpose PurposeAllows for the dynamic wrapping of objects in order to modify Facilitates the reuse of many fine grained objects, making thetheir existing responsibilities and behaviors. utilization of large numbers of objects more efficient.Use When Use When Many like objects are used and storage cost is high. n Object responsibilities and behaviors should be dynamicallyn modifiable. The majority of each object’s state can be made extrinsic. n A few shared objects can replace many unshared ones. n Concrete implementations should be decoupled fromn responsibilities and behaviors. The identity of each object does not matter. n Subclassing to achieve modification is impractical or impossible.n Example Specific functionality should not reside high in the object hierarchy.n Systems that allow users to define their own application flows A lot of little objects surrounding a concrete implementation isn and layouts often have a need to keep track of large numbers of acceptable. fields, pages, and other items that are almost identical to each other. By making these items into flyweights all instances of eachExample object can share the intrinsic state while keeping the extrinsicMany businesses set up their mail systems to take advantage of state separate. The intrinsic state would store the shared properties,decorators. When messages are sent from someone in the company such as how a textbox looks, how much data it can hold, andto an external address the mail server decorates the original what events it exposes. The extrinsic state would store themessage with copyright and confidentiality information. As long unshared properties, such as where the item belongs, how toas the message remains internal the information is not attached. react to a user click, and how to handle events.This decoration allows the message itself to remain unchangeduntil a runtime decision is made to wrap the message withadditional information. PROXY Object Structural FACADE Object Structural Client <<interface>> Subject Facade Complex System +request( ) RealSubject represents Proxy +request( ) +request( ) Purpose Allows for object level access control by acting as a pass throughPurposeSupplies a single interface to a set of interfaces within a system. entity or a placeholder object.Use When Use When A simple interface is needed to provide access to a complexn The object being represented is external to the system. n system. Objects need to be created on demand. n There are many dependencies between system implementationsn Access control for the original object is required. n and clients. Added functionality is required when an object is accessed. n Systems and subsystems should be layered.n ExampleExample Ledger applications often provide a way for users to reconcileBy exposing a set of functionalities through a web service their bank statements with their ledger data on demand, automat-the client code needs to only worry about the simple interface ing much of the process. The actual operation of communicatingbeing exposed to them and not the complex relationships that with a third party is a relatively expensive operation that should bemay or may not exist behind the web service layer. A single limited. By using a proxy to represent the communications objectweb service call to update a system with new data may actually we can limit the number of times or the intervals the communica-involve communication with a number of databases and systems, tion is invoked. In addition, we can wrap the complex instantiationhowever this detail is hidden due to the implementation of the of the communication object inside the proxy class, decouplingfaçade pattern. calling code from the implementation details. DZone, Inc. |
  • 6. 6 Design Patterns tech facts at your fingertips ABSTRACT FACTORY Object Creational FACTORY METHOD Object Creational Client <<interface>> Creator Product +factoryMethod( ) <<interface>> <<interface>> +anOperation( ) AbstractFactory AbstractProduct +createProductA( ) +createProductB( ) ConcreteProduct ConcreteCreator +factoryMethod( ) ConcreteFactory ConcreteProduct +createProductA( ) Purpose +createProductB( ) Exposes a method for creating objects, allowing subclasses to control the actual creation process.PurposeProvide an interface that delegates creation calls to one or Use Whenmore concrete classes in order to deliver specific objects. A class will not know what classes it will be required to create. n Subclasses may specify what objects should be created. n Use When Parent classes wish to defer creation to their subclasses. n The creation of objects should be independent of the systemn utilizing them. Example Many applications have some form of user and group structure Systems should be capable of using multiple families of objects.n for security. When the application needs to create a user it will Families of objects must be used together.n typically delegate the creation of the user to multiple user Libraries must be published without exposing implementationn implementations. The parent user object will handle most details. operations for each user but the subclasses will define the factory Concrete classes should be decoupled from clients.n method that handles the distinctions in the creation of each typeExample of user. A system may have AdminUser and StandardUser objectsEmail editors will allow for editing in multiple formats including each of which extend the User object. The AdminUser objectplain text, rich text, and HTML. Depending on the format being may perform some extra tasks to ensure access while theused, different objects will need to be created. If the message StandardUser may do the same to limit plain text then there could be a body object that representedjust plain text and an attachment object that simply encryptedthe attachment into Base64. If the message is HTML then the PROTOTYPE Object Creationalbody object would represent HTML encoded text and theattachment object would allow for inline representation and a Clientstandard attachment. By utilizing an abstract factory for creation <<interface>>we can then ensure that the appropriate object sets are created Prototypebased upon the style of email that is being sent. +clone( ) BUILDER Object Creational ConcretePrototype 1 ConcretePrototype 2 +clone( ) +clone( ) Director <<interface>> Builder Purpose ◆ +construct( ) +buildPart( ) Create objects based upon a template of an existing objects through cloning. ConcreteBuilder Use When +buildPart( ) n Composition, creation, and representation of objects should +getResult( ) be decoupled from a system.Purpose n Classes to be created are specified at runtime.Allows for the dynamic creation of objects based upon easily n A limited number of state combinations exist in an object.interchangeable algorithms. n Objects or object structures are required that are identical orUse When closely resemble other existing objects or object structures. Object creation algorithms should be decoupled from the system.n n The initial creation of each object is an expensive operation. Multiple representations of creation algorithms are required.n Example The addition of new creation functionality without changingn Rates processing engines often require the lookup of many the core code is necessary. different configuration values, making the initialization of the Runtime control over the creation process is required.n engine a relatively expensive process. When multiple instancesExample of the engine is needed, say for importing data in a multi-threadedA file transfer application could possibly use many different manner, the expense of initializing many engines is high. Byprotocols to send files and the actual transfer object that will be utilizing the prototype pattern we can ensure that only a singlecreated will be directly dependent on the chosen protocol. Using copy of the engine has to be initialized then simply clone thea builder we can determine the right builder to use to instantiate engine to create a duplicate of the already initialized object.the right object. If the setting is FTP then the FTP builder would The added benefit of this is that the clones can be streamlinedbe used when creating the object. to only include relevant data for their situation. DZone, Inc. |
  • 7. 7 Design Patterns tech facts at your fingertips Use When SINGLETON Object Creational Exactly one instance of a class is required. n Controlled access to a single object is necessary. n Example Singleton Most languages provide some sort of system or environment -static uniqueInstance object that allows the language to interact with the native operat- -singletonData ing system. Since the application is physically running on only one +static instance( ) operating system there is only ever a need for a single instance of +singletonOperation( ) this system object. The singleton pattern would be implemented by the language runtime to ensure that only a single copy of the Purpose system object is created and to ensure only appropriate processes Ensures that only one instance of a class is allowed within a system. are allowed access to it. ABOUT THE AUTHOR RECOMMENDED BOOK Jason McDonald Capturing a wealth of experience The product of two computer programmers, Jason McDonald wrote his about the design of object-oriented first application in BASIC while still in elementary school and has been software, four top-notch designers heavily involved in software ever since. He began his software career present a catalog of simple and when he found himself automating large portions of one of his first jobs. succinct solutions to commonly Finding his true calling, he quit the position and began working as a occurring design problems. Previously software engineer for various small companies where he was responsi- undocumented, these 23 patterns ble for all aspects of applications, from initial design to support. He has roughly 11 years allow designers to create more of experience in the software industry and many additional years of personal software flexible, elegant, and ultimately experience during which he has done everything from coding to architecture to leading reusable designs without having to rediscover the design and managing teams of engineers. Through his various positions he has been exposed solutions themselves. to design patterns and other architectural concepts for years. Jason is the founder of the Charleston SC Java Users Group and is currently working to help found a Charleston chapter of the International Association of Software Architects. BUY NOW Personal Blog: Projects: Charleston SC Java Users Group Get More FREE Refcardz. Visit now! Upcoming Refcardz: Available: Core Seam Essential Ruby Core CSS: Part I Core CSS: Part III Essential MySQL Struts2 JUnit and EasyMock Core .NET Hibernate Search Getting Started with MyEclipse Very First Steps in Flex FREE Equinox Spring Annotations C# EMF Core Java Groovy Core CSS: Part II NetBeans IDE 6.1 Java Editor XML PHP RSS and Atom JSP Expression Language Getting Started with JPA GlassFish Application Server ALM Best Practices JavaServer Faces Silverlight 2 Design Patterns Published June 2008 HTML and XHTML Visit for a complete listing of available Refcardz. DZone, Inc. ISBN-13: 978-1-934238-10-3 1251 NW Maynard ISBN-10: 1-934238-10-4 Cary, NC 27513 50795 888.678.0399DZone communities deliver over 4 million pages each month to 919.678.0300more than 1.7 million software developers, architects and decision Refcardz Feedback Welcome $7.95makers. DZone offers something for everyone, including news,tutorials, cheatsheets, blogs, feature articles, source code and more. Sponsorship Opportunities 9 781934 238103“DZone is a developer’s dream,” says PC Magazine.Copyright © 2008 DZone, Inc. All rights reserved. No part of this publication may be reproduced, stored in a retrieval system, or transmitted, in any form or by means electronic, mechanical,photocopying, or otherwise, without prior written permission of the publisher. Reference: Design Patterns: Elements of Reusable Object-Oriented Software, Erich Gamma, Richard Helm, Ralph Version 1.0Johnson, John M. Glissades. Addison-Wesley Professional, November 10, 1994.