SlideShare a Scribd company logo
1 of 7
Download to read offline
Subscribe Now for FREE! refcardz.com
                                                                                                                                                                                     tech facts at your fingertips

                                          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
   www.dzone.com




                                                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( )



                                                                                                                                                                                 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.                                                                                          n   Latest tools & technologies
                                                 Use When                                                                                                                        n   Hot tips & examples
                                                  Multiple objects may handle a request and the handler
                                                 n	                                                                                                                              n   Bonus content online
                                                  doesn’t have to be a specific object.                                                                                          n   New issue every 1-2 weeks
                                                  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	
                                                                                                                                                                       Refcardz.com
                                                  outcome.

                                                                                                                                  DZone, Inc.   |   www.dzone.com
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

                                                                                                 Purpose
Purpose
                                                                                                 Allows loose coupling by encapsulating the way disparate sets of
Defines a representation for a grammar as well as a mechanism
                                                                                                 objects interact and communicate with each other. Allows for the
to 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 as
n	

                                                                                                  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	


                                                                                                 Example
Example
                                                                                                 Mailing list software keeps track of who is signed up to the
Text based adventures, wildly popular in the 1980’s, provide
                                                                                                 mailing list and provides a single point of access through which
a good example of this. Many had simple commands, such
                                                                                                 any one person can communicate with the entire list. Without
as “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 mediator
the command and the qualifier (non-terminal and terminal                                         pattern the system is able to receive messages from any point
expressions) 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
                                                                                                 Purpose
without allowing access to its underlying representation.
                                                                                                 Allows for capturing and externalizing an object’s internal
Use When                                                                                         state so that it can be restored later, all without violating
 Access to elements is needed without access to the entire
n	

                                                                                                 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 details
n	                                                                                                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 to
traverse various types of data sets without worrying about the                                   Example
underlying implementation of the collection. Since clients simply                                Undo functionality can nicely be implemented using the
interact with the iterator interface, collections are left to define                             memento pattern. By serializing and deserializing the state of
the appropriate iterator for themselves. Some will allow full ac-                                an object before the change occurs we can preserve a snapshot
cess to the underlying data set while others may restrict certain                                of it that can later be restored should the user choose to undo
functionalities, such as removing items.                                                         the operation.

                                                                               DZone, Inc.   |   www.dzone.com
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 ( )
                                                                                              Purpose
Purpose                                                                                       Defines a set of encapsulated algorithms that can be swapped
Lets one or more objects be notified of state changes in other                                to carry out a specific behavior.
objects within the system.
                                                                                              Use When
Use When
                                                                                               The only difference between many related classes is their
                                                                                              n	


 State changes in one or more objects should trigger behavior
n	

                                                                                               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 the
n	

                                                                                               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.
                                                                                              Example
When buttons, text, and other fields are placed in applications
                                                                                              When importing data into a new system different validation
the application typically registers as a listener for those controls.
                                                                                              algorithms may be run based on the data set. By configuring the
When a user triggers an event, such as clicking a button, the
                                                                                              import to utilize strategies the conditional logic to determine
control iterates through its registered observers and sends a
notification 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 ( )
                                                                                              Purpose
Purpose                                                                                       Identifies the framework of an algorithm, allowing implementing
Ties object circumstances to its behavior, allowing the object                                classes to define the actual behavior.
to behave in different ways based upon its internal state.
                                                                                              Use When
Use 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
                                                                                              Example
is “not sent” then the call to send() is going to send the message
                                                                                              A parent class, InstantMessage, will likely have all the methods
while a call to recallMessage() will either throw an error or do
nothing. However, if the state is “sent” then the call to send()                              required to handle sending a message. However, the actual
would either throw an error or do nothing while the call to                                   serialization of the data to send may vary depending on the
recallMessage() would attempt to send a recall notification                                   implementation. A video message and a plain text message
to recipients. To avoid conditional statements in most or all                                 will require different algorithms in order to serialize the data
methods there would be multiple state objects that handle the                                 correctly. Subclasses of InstantMessage can provide their
implementation with respect to their particular state. The calls                              own implementation of the serialization method, allowing the
within the Email object would then be delegated down to the                                   parent class to work with them without understanding their
appropriate state object for handling.                                                        implementation details.


                                                                           DZone, Inc.   |   www.dzone.com
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.
Purpose
Allows for one or more operations to be applied to a set of objects                                Use When
at 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 operations
n	
                                                                                                    extensible.
 performed upon it.                                                                                 Changes in the implementation of an abstraction should
                                                                                                   n	


 The object structure can’t change but operations performed
n	
                                                                                                    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 an
n	

                                                                                                   Example
 object structure.
                                                                                                   The Java Virtual Machine (JVM) has its own native set of functions
 Exposing internal state or operations of the object structure
n	

                                                                                                   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 object
n	
                                                                                                   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 it
Example                                                                                            delegates the rendering call to the concrete implementation
Calculating taxes in different regions on sets of invoices would                                   of the JVM that knows how to communicate with the operating
require 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 and
line items. This allows the hierarchy of items to be visited by cal-
                                                                                                        COMPOSITE                                            Object Structural
culation 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 ( )
                                                                                                   Purpose
Purpose                                                                                            Facilitates the creation of object hierarchies where each object
Permits classes with disparate interfaces to work together by                                      can be treated independently or as a set of nested objects
creating a common object by which they may communicate                                             through the same interface.
and interact.                                                                                      Use When
Use 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 the
Example                                                                                            product of a single item while other times it is an aggregation
A billing application needs to interface with an HR application in                                 of multiple items. By implementing items as composites we can
order to exchange employee data, however each has its own inter-                                   treat the aggregates and the items in the same way, allowing us
face and implementation for the Employee object. In addition, the                                  to simply iterate over the tree and invoke functionality on each
SSN is stored in different formats by each system. By creating an                                  item. By calling the getCost() method on any given node we
adapter 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 single
and is able to transform the SSN format in the process.                                            items or groups of items.

                                                                                DZone, Inc.   |   www.dzone.com
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                                                                                    Purpose
Allows for the dynamic wrapping of objects in order to modify                              Facilitates the reuse of many fine grained objects, making the
their 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 dynamically
n	



 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 from
n	



 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 is
n	                                                                                         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 each
Example
                                                                                           object can share the intrinsic state while keeping the extrinsic
Many 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, and
to an external address the mail server decorates the original
                                                                                           what events it exposes. The extrinsic state would store the
message with copyright and confidentiality information. As long
                                                                                           unshared properties, such as where the item belongs, how to
as 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 unchanged
until a runtime decision is made to wrap the message with
additional 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 through
Purpose
Supplies 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 complex
n	                                                                                          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 implementations
n	                                                                                          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	
                                                                                           Example
Example                                                                                    Ledger applications often provide a way for users to reconcile
By 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 communicating
being exposed to them and not the complex relationships that                               with a third party is a relatively expensive operation that should be
may or may not exist behind the web service layer. A single                                limited. By using a proxy to represent the communications object
web 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 instantiation
however this detail is hidden due to the implementation of the                             of the communication object inside the proxy class, decoupling
façade pattern.                                                                            calling code from the implementation details.

                                                                        DZone, Inc.   |   www.dzone.com
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.
Purpose
Provide an interface that delegates creation calls to one or                              Use When
more 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 system
n	



 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 implementation
n	

                                                                                          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 type
Example                                                                                   of user. A system may have AdminUser and StandardUser objects
Email editors will allow for editing in multiple formats including                        each of which extend the User object. The AdminUser object
plain text, rich text, and HTML. Depending on the format being                            may perform some extra tasks to ensure access while the
used, different objects will need to be created. If the message                           StandardUser may do the same to limit access.
is plain text then there could be a body object that represented
just plain text and an attachment object that simply encrypted
the attachment into Base64. If the message is HTML then the                                    PROTOTYPE                                       Object Creational

body object would represent HTML encoded text and the
attachment object would allow for inline representation and a                                           Client
standard attachment. By utilizing an abstract factory for creation
                                                                                                                        <<interface>>
we can then ensure that the appropriate object sets are created                                                          Prototype
based 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 or
Use 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 changing
n	
                                                                                          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 instances
Example                                                                                   of the engine is needed, say for importing data in a multi-threaded
A file transfer application could possibly use many different                             manner, the expense of initializing many engines is high. By
protocols to send files and the actual transfer object that will be                       utilizing the prototype pattern we can ensure that only a single
created will be directly dependent on the chosen protocol. Using                          copy of the engine has to be initialized then simply clone the
a 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 streamlined
be used when creating the object.                                                         to only include relevant data for their situation.

                                                                        DZone, Inc.   |   www.dzone.com
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: http://www.mcdonaldland.info/                                                                                                           books.dzone.com/books/designpatterns
     Projects: Charleston SC Java Users Group




 Want More? Download Now. Subscribe at refcardz.com
 Upcoming Refcardz:                                          Available:
 n   	 C#                                                    Published June 2008                                                                                                   FREE
 n   	 GlassFish Application Server                          n   	 jQuerySelectors
     	 Flexible Rails: Flex 3 on Rails 2
                                                             Published May 2008
 n




 n   		RSS and Atom                                          n   	 Windows PowerShell
 n   		Apache Struts 2                                       n   	 Dependency Injection in EJB 3                                                                     Getting Started
                                                                                                                                                                     with Ajax
     		MS Silverlight 2                                                                                                                                                                                    GWT Style,
 n
                                                             Published April 2008                                                                                    Published April 2008
                                                                                                                                                                                                         Configuration
 n   		NetBeans IDE 6 Java Editor                            n   	 Spring Configuration                                                                                                             and JSNI Reference
 n   		Groovy                                                n   	 Getting Started with Eclipse                                                                                                     Published April 2008




                                                                                                                          DZone, Inc.
                                                                                                                                                                                          ISBN-13: 978-1-934238-10-3
                                                                                                                          1251 NW Maynard
                                                                                                                                                                                          ISBN-10: 1-934238-10-4
                                                                                                                          Cary, NC 27513
                                                                                                                                                                                                               50795
                                                                                                                          888.678.0399
DZone communities deliver over 3.5 million pages per month to                                                             919.678.0300
more than 1.5 million software developers, architects and designers.
                                                                                                                          Refcardz Feedback Welcome
DZone offers something for every developer, including news,                                                               refcardz@dzone.com
                                                                                                                                                                                                                            $7.95




tutorials, blogs, cheatsheets, feature articles, source code and more.                                                    Sponsorship Opportunities                                    9 781934 238103
“DZone is a developer’s dream,” says PC Magazine.                                                                         sales@dzone.com
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.0
Johnson, John M. Glissades. Addison-Wesley Professional, November 10, 1994.

More Related Content

What's hot (7)

Image Denoising Techniques Preserving Edges
Image Denoising Techniques Preserving EdgesImage Denoising Techniques Preserving Edges
Image Denoising Techniques Preserving Edges
 
Database Design 2009
Database Design 2009Database Design 2009
Database Design 2009
 
System events concept presentation
System events concept presentationSystem events concept presentation
System events concept presentation
 
Are homes smart if they are aware?
Are homes smart if they are aware?Are homes smart if they are aware?
Are homes smart if they are aware?
 
Fcv learn le_cun
Fcv learn le_cunFcv learn le_cun
Fcv learn le_cun
 
garima_typo
garima_typogarima_typo
garima_typo
 
Moose Tutorial at WCRE 2008
Moose Tutorial at WCRE 2008Moose Tutorial at WCRE 2008
Moose Tutorial at WCRE 2008
 

Viewers also liked

ObamaShirts
ObamaShirtsObamaShirts
ObamaShirtsreynolds
 
Palin Clothes Spending Has Dems Salivating Republicans Digusted
Palin Clothes Spending Has Dems Salivating Republicans DigustedPalin Clothes Spending Has Dems Salivating Republicans Digusted
Palin Clothes Spending Has Dems Salivating Republicans Digustedreynolds
 
Tsunami Before & After
Tsunami Before & AfterTsunami Before & After
Tsunami Before & Afterreynolds
 
Snake Catchers In Africa
Snake Catchers In AfricaSnake Catchers In Africa
Snake Catchers In Africareynolds
 
Funny Images
Funny ImagesFunny Images
Funny Imagesreynolds
 
Obama+Presidential+Seal
Obama+Presidential+SealObama+Presidential+Seal
Obama+Presidential+Sealreynolds
 
Three Thing In The Life
Three Thing In The LifeThree Thing In The Life
Three Thing In The Lifereynolds
 

Viewers also liked (7)

ObamaShirts
ObamaShirtsObamaShirts
ObamaShirts
 
Palin Clothes Spending Has Dems Salivating Republicans Digusted
Palin Clothes Spending Has Dems Salivating Republicans DigustedPalin Clothes Spending Has Dems Salivating Republicans Digusted
Palin Clothes Spending Has Dems Salivating Republicans Digusted
 
Tsunami Before & After
Tsunami Before & AfterTsunami Before & After
Tsunami Before & After
 
Snake Catchers In Africa
Snake Catchers In AfricaSnake Catchers In Africa
Snake Catchers In Africa
 
Funny Images
Funny ImagesFunny Images
Funny Images
 
Obama+Presidential+Seal
Obama+Presidential+SealObama+Presidential+Seal
Obama+Presidential+Seal
 
Three Thing In The Life
Three Thing In The LifeThree Thing In The Life
Three Thing In The Life
 

Similar to Designpatterns

GoF J2EE Design Patterns
GoF J2EE Design PatternsGoF J2EE Design Patterns
GoF J2EE Design PatternsThanh Nguyen
 
Good code-isnt-enough
Good code-isnt-enoughGood code-isnt-enough
Good code-isnt-enoughSkills Matter
 
Dancing about architecture
Dancing about architectureDancing about architecture
Dancing about architectureCoraline Ehmke
 
GPars: Groovy Parallelism for Java
GPars: Groovy Parallelism for JavaGPars: Groovy Parallelism for Java
GPars: Groovy Parallelism for JavaRussel Winder
 
Serenity Project: Security in Software Enginering
Serenity Project: Security in Software EngineringSerenity Project: Security in Software Enginering
Serenity Project: Security in Software EngineringFrancisco Sanchez Cid
 
Framework Engineering
Framework EngineeringFramework Engineering
Framework EngineeringYoungSu Son
 
Itp design patterns - 2003
Itp design patterns - 2003Itp design patterns - 2003
Itp design patterns - 2003Shibu S R
 
Flash Camp Chennai - Social network with ORM
Flash Camp Chennai - Social network with ORMFlash Camp Chennai - Social network with ORM
Flash Camp Chennai - Social network with ORMRIA RUI Society
 
Software archiecture lecture09
Software archiecture   lecture09Software archiecture   lecture09
Software archiecture lecture09Luktalja
 
Architecture Description Languages: An Overview
Architecture Description Languages: An OverviewArchitecture Description Languages: An Overview
Architecture Description Languages: An Overviewelliando dias
 
B vb script11
B vb script11B vb script11
B vb script11oakhrd
 
Prophecy Of Design Patterns
Prophecy Of Design PatternsProphecy Of Design Patterns
Prophecy Of Design Patternspradeepkothiyal
 
Summer Training In Dotnet
Summer Training In DotnetSummer Training In Dotnet
Summer Training In DotnetDUCC Systems
 
Summer training in dotnet
Summer training in dotnetSummer training in dotnet
Summer training in dotnetDUCC Systems
 
Framework Engineering_Final
Framework Engineering_FinalFramework Engineering_Final
Framework Engineering_FinalYoungSu Son
 
UML &amp; SCRUM Workshop
UML &amp; SCRUM WorkshopUML &amp; SCRUM Workshop
UML &amp; SCRUM Workshopvilaltajo
 
Architecture: where do you start?
 Architecture: where do you start? Architecture: where do you start?
Architecture: where do you start?Skills Matter
 
Model Runway Part 2 Design Best Practices at Blue Cross BlueShield
Model Runway Part 2   Design Best Practices at Blue Cross BlueShieldModel Runway Part 2   Design Best Practices at Blue Cross BlueShield
Model Runway Part 2 Design Best Practices at Blue Cross BlueShieldRoger Snook
 

Similar to Designpatterns (20)

GoF J2EE Design Patterns
GoF J2EE Design PatternsGoF J2EE Design Patterns
GoF J2EE Design Patterns
 
Good code-isnt-enough
Good code-isnt-enoughGood code-isnt-enough
Good code-isnt-enough
 
Dancing about architecture
Dancing about architectureDancing about architecture
Dancing about architecture
 
GPars: Groovy Parallelism for Java
GPars: Groovy Parallelism for JavaGPars: Groovy Parallelism for Java
GPars: Groovy Parallelism for Java
 
Serenity Project: Security in Software Enginering
Serenity Project: Security in Software EngineringSerenity Project: Security in Software Enginering
Serenity Project: Security in Software Enginering
 
Framework Engineering
Framework EngineeringFramework Engineering
Framework Engineering
 
Uml3
Uml3Uml3
Uml3
 
Sa 008 patterns
Sa 008 patternsSa 008 patterns
Sa 008 patterns
 
Itp design patterns - 2003
Itp design patterns - 2003Itp design patterns - 2003
Itp design patterns - 2003
 
Flash Camp Chennai - Social network with ORM
Flash Camp Chennai - Social network with ORMFlash Camp Chennai - Social network with ORM
Flash Camp Chennai - Social network with ORM
 
Software archiecture lecture09
Software archiecture   lecture09Software archiecture   lecture09
Software archiecture lecture09
 
Architecture Description Languages: An Overview
Architecture Description Languages: An OverviewArchitecture Description Languages: An Overview
Architecture Description Languages: An Overview
 
B vb script11
B vb script11B vb script11
B vb script11
 
Prophecy Of Design Patterns
Prophecy Of Design PatternsProphecy Of Design Patterns
Prophecy Of Design Patterns
 
Summer Training In Dotnet
Summer Training In DotnetSummer Training In Dotnet
Summer Training In Dotnet
 
Summer training in dotnet
Summer training in dotnetSummer training in dotnet
Summer training in dotnet
 
Framework Engineering_Final
Framework Engineering_FinalFramework Engineering_Final
Framework Engineering_Final
 
UML &amp; SCRUM Workshop
UML &amp; SCRUM WorkshopUML &amp; SCRUM Workshop
UML &amp; SCRUM Workshop
 
Architecture: where do you start?
 Architecture: where do you start? Architecture: where do you start?
Architecture: where do you start?
 
Model Runway Part 2 Design Best Practices at Blue Cross BlueShield
Model Runway Part 2   Design Best Practices at Blue Cross BlueShieldModel Runway Part 2   Design Best Practices at Blue Cross BlueShield
Model Runway Part 2 Design Best Practices at Blue Cross BlueShield
 

More from reynolds

America chooses barack obama
America chooses barack obamaAmerica chooses barack obama
America chooses barack obamareynolds
 
Obama Biden
Obama BidenObama Biden
Obama Bidenreynolds
 
Vote For The Barack Obama
Vote For The Barack ObamaVote For The Barack Obama
Vote For The Barack Obamareynolds
 
Barack Obama
Barack ObamaBarack Obama
Barack Obamareynolds
 
Vote For Change
Vote For ChangeVote For Change
Vote For Changereynolds
 
Barack Obama
Barack ObamaBarack Obama
Barack Obamareynolds
 
Barack Obama Phots Gallery
Barack Obama Phots GalleryBarack Obama Phots Gallery
Barack Obama Phots Galleryreynolds
 
Barack Obama
Barack ObamaBarack Obama
Barack Obamareynolds
 
Canstruction
CanstructionCanstruction
Canstructionreynolds
 
Some Of The Beautiful Temples Of The World
Some Of The Beautiful Temples Of The WorldSome Of The Beautiful Temples Of The World
Some Of The Beautiful Temples Of The Worldreynolds
 
Learn to live
Learn to liveLearn to live
Learn to livereynolds
 
MANAGING RISK IN INTERNATIONAL BUSINESS
MANAGING RISK IN INTERNATIONAL BUSINESSMANAGING RISK IN INTERNATIONAL BUSINESS
MANAGING RISK IN INTERNATIONAL BUSINESSreynolds
 
Artistic Airplanes
Artistic AirplanesArtistic Airplanes
Artistic Airplanesreynolds
 
America The Beautiful
America The BeautifulAmerica The Beautiful
America The Beautifulreynolds
 
Web 20 Business Models
Web 20 Business ModelsWeb 20 Business Models
Web 20 Business Modelsreynolds
 
Girls Just Wanna Have Fun
Girls Just Wanna Have FunGirls Just Wanna Have Fun
Girls Just Wanna Have Funreynolds
 
Fattest Athlete In The World
Fattest Athlete In The WorldFattest Athlete In The World
Fattest Athlete In The Worldreynolds
 
pumpkin faces
pumpkin facespumpkin faces
pumpkin facesreynolds
 
Halloween Art
Halloween ArtHalloween Art
Halloween Artreynolds
 

More from reynolds (20)

America chooses barack obama
America chooses barack obamaAmerica chooses barack obama
America chooses barack obama
 
Obama Biden
Obama BidenObama Biden
Obama Biden
 
Vote For The Barack Obama
Vote For The Barack ObamaVote For The Barack Obama
Vote For The Barack Obama
 
Barack Obama
Barack ObamaBarack Obama
Barack Obama
 
Vote For Change
Vote For ChangeVote For Change
Vote For Change
 
Barack Obama
Barack ObamaBarack Obama
Barack Obama
 
Barack Obama Phots Gallery
Barack Obama Phots GalleryBarack Obama Phots Gallery
Barack Obama Phots Gallery
 
Barack Obama
Barack ObamaBarack Obama
Barack Obama
 
Canstruction
CanstructionCanstruction
Canstruction
 
Some Of The Beautiful Temples Of The World
Some Of The Beautiful Temples Of The WorldSome Of The Beautiful Temples Of The World
Some Of The Beautiful Temples Of The World
 
Learn to live
Learn to liveLearn to live
Learn to live
 
MANAGING RISK IN INTERNATIONAL BUSINESS
MANAGING RISK IN INTERNATIONAL BUSINESSMANAGING RISK IN INTERNATIONAL BUSINESS
MANAGING RISK IN INTERNATIONAL BUSINESS
 
Artistic Airplanes
Artistic AirplanesArtistic Airplanes
Artistic Airplanes
 
America The Beautiful
America The BeautifulAmerica The Beautiful
America The Beautiful
 
Good Life
Good LifeGood Life
Good Life
 
Web 20 Business Models
Web 20 Business ModelsWeb 20 Business Models
Web 20 Business Models
 
Girls Just Wanna Have Fun
Girls Just Wanna Have FunGirls Just Wanna Have Fun
Girls Just Wanna Have Fun
 
Fattest Athlete In The World
Fattest Athlete In The WorldFattest Athlete In The World
Fattest Athlete In The World
 
pumpkin faces
pumpkin facespumpkin faces
pumpkin faces
 
Halloween Art
Halloween ArtHalloween Art
Halloween Art
 

Recently uploaded

2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024The Digital Insurer
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilV3cube
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Paola De la Torre
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 

Recently uploaded (20)

2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of Brazil
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 

Designpatterns

  • 1. Subscribe Now for FREE! refcardz.com tech facts at your fingertips 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 www.dzone.com 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( ) 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. n Latest tools & technologies Use When n Hot tips & examples Multiple objects may handle a request and the handler n n Bonus content online doesn’t have to be a specific object. n New issue every 1-2 weeks 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 Refcardz.com outcome. DZone, Inc. | www.dzone.com
  • 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 Purpose Purpose Allows loose coupling by encapsulating the way disparate sets of Defines a representation for a grammar as well as a mechanism objects interact and communicate with each other. Allows for the to 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 as n 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 Example Example Mailing list software keeps track of who is signed up to the Text based adventures, wildly popular in the 1980’s, provide mailing list and provides a single point of access through which a good example of this. Many had simple commands, such any one person can communicate with the entire list. Without as “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 mediator the command and the qualifier (non-terminal and terminal pattern the system is able to receive messages from any point expressions) 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 Purpose without allowing access to its underlying representation. Allows for capturing and externalizing an object’s internal Use When state so that it can be restored later, all without violating Access to elements is needed without access to the entire n 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 details n 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 to traverse various types of data sets without worrying about the Example underlying implementation of the collection. Since clients simply Undo functionality can nicely be implemented using the interact with the iterator interface, collections are left to define memento pattern. By serializing and deserializing the state of the appropriate iterator for themselves. Some will allow full ac- an object before the change occurs we can preserve a snapshot cess to the underlying data set while others may restrict certain of it that can later be restored should the user choose to undo functionalities, such as removing items. the operation. DZone, Inc. | www.dzone.com
  • 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 ( ) Purpose Purpose Defines a set of encapsulated algorithms that can be swapped Lets one or more objects be notified of state changes in other to carry out a specific behavior. objects within the system. Use When Use When The only difference between many related classes is their n State changes in one or more objects should trigger behavior n 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 the n 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. Example When buttons, text, and other fields are placed in applications When importing data into a new system different validation the application typically registers as a listener for those controls. algorithms may be run based on the data set. By configuring the When a user triggers an event, such as clicking a button, the import to utilize strategies the conditional logic to determine control iterates through its registered observers and sends a notification 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 ( ) Purpose Purpose Identifies the framework of an algorithm, allowing implementing Ties object circumstances to its behavior, allowing the object classes to define the actual behavior. to behave in different ways based upon its internal state. Use When Use 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 Example is “not sent” then the call to send() is going to send the message A parent class, InstantMessage, will likely have all the methods while a call to recallMessage() will either throw an error or do nothing. However, if the state is “sent” then the call to send() required to handle sending a message. However, the actual would either throw an error or do nothing while the call to serialization of the data to send may vary depending on the recallMessage() would attempt to send a recall notification implementation. A video message and a plain text message to recipients. To avoid conditional statements in most or all will require different algorithms in order to serialize the data methods there would be multiple state objects that handle the correctly. Subclasses of InstantMessage can provide their implementation with respect to their particular state. The calls own implementation of the serialization method, allowing the within the Email object would then be delegated down to the parent class to work with them without understanding their appropriate state object for handling. implementation details. DZone, Inc. | www.dzone.com
  • 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. Purpose Allows for one or more operations to be applied to a set of objects Use When at 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 operations n extensible. performed upon it. Changes in the implementation of an abstraction should n The object structure can’t change but operations performed n 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 an n Example object structure. The Java Virtual Machine (JVM) has its own native set of functions Exposing internal state or operations of the object structure n 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 object n 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 it Example delegates the rendering call to the concrete implementation Calculating taxes in different regions on sets of invoices would of the JVM that knows how to communicate with the operating require 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 and line items. This allows the hierarchy of items to be visited by cal- COMPOSITE Object Structural culation 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 ( ) Purpose Purpose Facilitates the creation of object hierarchies where each object Permits classes with disparate interfaces to work together by can be treated independently or as a set of nested objects creating a common object by which they may communicate through the same interface. and interact. Use When Use 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 the Example product of a single item while other times it is an aggregation A billing application needs to interface with an HR application in of multiple items. By implementing items as composites we can order to exchange employee data, however each has its own inter- treat the aggregates and the items in the same way, allowing us face and implementation for the Employee object. In addition, the to simply iterate over the tree and invoke functionality on each SSN is stored in different formats by each system. By creating an item. By calling the getCost() method on any given node we adapter 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 single and is able to transform the SSN format in the process. items or groups of items. DZone, Inc. | www.dzone.com
  • 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 Purpose Allows for the dynamic wrapping of objects in order to modify Facilitates the reuse of many fine grained objects, making the their 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 dynamically n 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 from n 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 is n 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 each Example object can share the intrinsic state while keeping the extrinsic Many 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, and to an external address the mail server decorates the original what events it exposes. The extrinsic state would store the message with copyright and confidentiality information. As long unshared properties, such as where the item belongs, how to as 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 unchanged until a runtime decision is made to wrap the message with additional 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 through Purpose Supplies 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 complex n 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 implementations n 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 Example Example Ledger applications often provide a way for users to reconcile By 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 communicating being exposed to them and not the complex relationships that with a third party is a relatively expensive operation that should be may or may not exist behind the web service layer. A single limited. By using a proxy to represent the communications object web 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 instantiation however this detail is hidden due to the implementation of the of the communication object inside the proxy class, decoupling façade pattern. calling code from the implementation details. DZone, Inc. | www.dzone.com
  • 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. Purpose Provide an interface that delegates creation calls to one or Use When more 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 system n 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 implementation n 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 type Example of user. A system may have AdminUser and StandardUser objects Email editors will allow for editing in multiple formats including each of which extend the User object. The AdminUser object plain text, rich text, and HTML. Depending on the format being may perform some extra tasks to ensure access while the used, different objects will need to be created. If the message StandardUser may do the same to limit access. is plain text then there could be a body object that represented just plain text and an attachment object that simply encrypted the attachment into Base64. If the message is HTML then the PROTOTYPE Object Creational body object would represent HTML encoded text and the attachment object would allow for inline representation and a Client standard attachment. By utilizing an abstract factory for creation <<interface>> we can then ensure that the appropriate object sets are created Prototype based 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 or Use 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 changing n 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 instances Example of the engine is needed, say for importing data in a multi-threaded A file transfer application could possibly use many different manner, the expense of initializing many engines is high. By protocols to send files and the actual transfer object that will be utilizing the prototype pattern we can ensure that only a single created will be directly dependent on the chosen protocol. Using copy of the engine has to be initialized then simply clone the a 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 streamlined be used when creating the object. to only include relevant data for their situation. DZone, Inc. | www.dzone.com
  • 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: http://www.mcdonaldland.info/ books.dzone.com/books/designpatterns Projects: Charleston SC Java Users Group Want More? Download Now. Subscribe at refcardz.com Upcoming Refcardz: Available: n C# Published June 2008 FREE n GlassFish Application Server n jQuerySelectors Flexible Rails: Flex 3 on Rails 2 Published May 2008 n n RSS and Atom n Windows PowerShell n Apache Struts 2 n Dependency Injection in EJB 3 Getting Started with Ajax MS Silverlight 2 GWT Style, n Published April 2008 Published April 2008 Configuration n NetBeans IDE 6 Java Editor n Spring Configuration and JSNI Reference n Groovy n Getting Started with Eclipse Published April 2008 DZone, Inc. ISBN-13: 978-1-934238-10-3 1251 NW Maynard ISBN-10: 1-934238-10-4 Cary, NC 27513 50795 888.678.0399 DZone communities deliver over 3.5 million pages per month to 919.678.0300 more than 1.5 million software developers, architects and designers. Refcardz Feedback Welcome DZone offers something for every developer, including news, refcardz@dzone.com $7.95 tutorials, blogs, cheatsheets, feature articles, source code and more. Sponsorship Opportunities 9 781934 238103 “DZone is a developer’s dream,” says PC Magazine. sales@dzone.com 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.0 Johnson, John M. Glissades. Addison-Wesley Professional, November 10, 1994.