SlideShare une entreprise Scribd logo
1  sur  6
Télécharger pour lire hors ligne
GOF Design Patterns, The summary




                                                                                       by Achraf SFAXI
                                                                         IS System Architect Consultant
                                                                              SUN Certified Professional

                                                                                           August 2006




The creational one’s specialize in abstracting the instation process. They help in isolating how objects
are created, composed and represented from the rest of the system.

They are five patterns defined in this category: Abstract Factory, Builder, Factory Method, Prototype,
Singleton.

The Abstract Factory

       The Abstract Factory provides an interface for creating families of related or
        dependent objects without specifying their concrete classes.
       When to use it ?
                 -   The system should be independent of how its products are created, composed and
                     represented
                 -   A family of related product objects is designed to be used togetheran and we need
                     to enforce this constraint.
                 -   We need to provide a class library of products and we want to reveal just their
                     interfaces, not their implementations

The Builder

       The goal of the Builder design pattern is to separate the construction of a complex
        object from its representations.
       When to use it ?
                 -   The algorithm for creating a complex object should be independent of the parts
                     that make up the object and who they are assembled.
                 -   The construction process must allow different representations for the constructed
                     object.




achraf.sfaxi.perso.sfr.fr                                                                                  1
The Factory Method

       The Factory Method defines an interface for creating an object but lets subclasses
        decide which class to instanciate. Factory method lets a class defer instantiation to
        subclasses.
       When to use it ?
                 -    A class cannot anticipate the class of objects it must create. A class wants its
                     subclasses to specify the objects it creates.

The Prototype

       The prototype specifies the kinds of objects to create using a prototypical instance
        and creates new objects by copying this prototype.
       When we use it ?
                 -    The classes to instanciate are specified at runtime, for example, by dynamic
                     loading.
                 -   We have to avoid building a class hierarchy of factories that parallels the class
                     hierarchy of products.
                 -   Instances of a class can have only a few different combinations of state

The Singleton

       The singleton ensures that a class has only one instance and provides a global point
        of access to that class.
       When to use it ?
               - The must be exactly one instance of a class and it must be accessible to clients
                     from a well-known access point.



The Behavioral one’s

Behavioral patterns are concerned with algorithms and the assignement of responsibilities to
objects. They document the patterns of objects as well as the patterns of communication between
them. They are eleven patterns defined in this category : Chain of responsibility, Command,
Interpreter, Iterator, Mediator, Memento, Observer, State, strategy, Template Method and Visitor.

The Chain of responsibility

       Avoid coupling the sender of a request to its receiver by giving more than one object
        a chance to handle the request. Chains the receiving objects and passes the request
        along the chain until an object handles it
       Reduced coupling
       Added flexibility in assigning responsibilities to objects.
       When to use it ?
       More than one object can handle a request, and the handler isn’t known.
               - The set of objects that can handle a request should be specified dynamically

The Command

       The Comand encapsulates a request as an object.
       When to use it ?



achraf.sfaxi.perso.sfr.fr                                                                                2
-    When it is necessary to issue requests to objects without knowing anything about
                     the operation being requested or the receiver of the request.
                 -   You specify queue and execute requests at different times.
                 -   You must support undo, logging or transactions



The Interpreter

       Given a language, defines a representation for its grammar along with an interpreter
        that uses the representation to interpret sentences in the language.
       When to use it ?
                 -   The grammar of the language is simple
                 -   Efficiency is not a critical concern

The Iterator

       The Iterator provides a way to access the elements of an aggregate object sequentially
        without exposing its underlying representation.
       When to use it ?
                 -   We want to access a collection object’s contents without exposing its internal
                     representation.
                 -    Provide a uniform interface for traversing different structures in a collection.

The Mediator

       The Mediator defines an object that encapsulates how a set of objects interacts. In a
        complex object structure where they are many connection between objects, every
        object must has knowledge of the other. We can avoid this by defining a separate
        mediator object that is responsible for controlling and coordinating the interaction of
        a group of objects (like a router for a network hosts).
       When to use it ?
                 -   A set of objects of objects communicates in well-defined but complex ways.
                 -   Reusing an object is difficult because it refers to and communicates with many
                     objects

The Memento

       Violating encapsulation, the Memento pattern captures and externaliszes an object’s
        internal state so that the object can be restored to this state later.
       A Memento is an object that stores a snapshot of the internal state of another object
        (the Momento’s originator).
       When to use it ?
                 -    A snapshot of an object’s state must be saved so it can be restored to that state
                     later
                 -   A direct interface to obtain the state would expose implementation details and
                     break the object’s encapsulation

The Observer

       The Observer defines a one-to-many dependency between objects so that when one
        object changes state, all its dependents are automatically notified and updated.
       When to use it ?

achraf.sfaxi.perso.sfr.fr                                                                                 3
-    A need to support the broadcast communication.
                 -   A change to one object requires changing others and we don’t know how many
                     objects need to be changed.
                 -   An object should be able to notify other objects without making assumptions
                     about who these objects are.



The State

       Allows an object to alter its behavior when its internal state changes. The object will
        appear to change its class.
       When to use it ?
                 -   An object’s behavior depends on its state and it must change its behavior at
                     runtime depending on that state.
                 -   Operations have large, multipart conditional statements that depend on the
                     object’s state.

The Strategy

       The strategy pattern defines a group of classes that represent a set of possible
        behaviors. The functionality differs depending on the strategy (algorithm) chosen
       When to use it ?
                 -   Many related classes differ only in their behavior
                 -   We need different variants of an algorithm

The template Method

       The Template Method defines the skeleton of an algorithm in an operation defining
        some steps to subclasses. The Template Method pattern lets subclasses redefine
        certain steps of an algorithm without changing the algorithm’s structure.
       A template method defines an algorithm in terms of abstract operations that
        subclasses override to provide concrete behavior.
       When to use it ?
                - to implement the invariant parts of an algorithm once and leave it up to
                     subclasses to implement the behavior that can vary

The Visitor

       The Visitor pattern provides a maintainable, easy way to represent an oeration to be
        performed on the elements of an object structure. New operations can be defined
        without changing the classes of the elements on which it operates.
       When to use it ?
                 -   when we need to make adding new operations easy.
                 -   when the classes defining the object structure rarely change, but we often want to
                     define new operations over thje structure.



The Structural Patterns

The Structural patterns are concerned with how classes and objects are composed to form larger
structures.


achraf.sfaxi.perso.sfr.fr                                                                                 4
Seven patterns are defined in this category : Adapter, Bridge, Composite, Decorator, Façade,
Flyweight and Proxy.

The Adapter

       The Adapter design pattern defines an intermediary between two classes, converting
        the interface of one class so it can be used with the other. This enables classes with
        incompatible interfaces to work together. Let us say that it adapts a class to work
        with another one by making the two-classes interfaces compatible.
        When to use it ?
                 -   when we need to allow one or more incompatible objects to communicate and
                     interact
                 -   when we need to improve reusability of older functionality

The Bridge

       Decouples an abstraction from its implementation, so the two can vary
        independently.
       When to use it ?
                 -   When we need to avoid a permanent binding between an abstraction and its
                     implementation (decouple interface and implementation)
                 -   When want to have both abstractions and their implementations extensible using
                     subclasses.

The Composite

       Composite pattern combines objects into tree structures to represent either the whole
        hierarchy or a part of the hierarchy. This recursive composition allows clients to treat
        individual objects and compositions of objects uniformly.
       When to use it ?
                 -   when we want to represent part-whole hierarchies of objects
                 -   when we want clients to be able to ignore the difference between compositions of
                     objects and individual objects.

The Decorator

       It attaches additional responsibilities to an object dynamically.
       Decorators provide a flexible alternative to subclassing for extending functionality.
       When to use it ?
                 -   When we want to add responsibilities ton individual objects dynamically and
                     transparently, that is, without affecting other objects
                 -   When we want to add responsibilities that can be withdraw later
                 -   When extension by subclassing is impractical

The Facade

       Provide a unified interface to a set of interfaces in a subsystem. Façade defines a
        hieigher level interface that makes the subsystem easier to use (because we only have
        to deal with one interface to communicate with the subsystem).
       When we use it ?
                 -   we want to provide a simple interface to a complex subsystem



achraf.sfaxi.perso.sfr.fr                                                                               5
-    There are many dependencies between clients and the implementation classes of
                     an abstraction.

The Flyweight

       It uses sharing to support a large number of fine-grained objects efficiently. The
        flyweight pattern uses a shared flyweight object that can be used in multiple contexts
        simultaneously. The flyweight has a shareable intrinsic state extrinsic state consisting
        of information independent of the flyweight’s context and a non shareable
        flyweight’s context. Client objects are responsible for passing extrinsic state to the
        flyweight when it needs it.
       When to use it ?
                 -   When an application uses a large number of objects.
                 -   When storage cost high because of the high number of objects
                 -   When most of the objects state can be made extrinsic
                 -   When many groups of objects may be replaced by relatively few shared objects,
                     once extrinsic state is removed.
                 -   The benefits of using the flyweight design pattern are, essentially, reducing the
                     number of objects to handle and reducing the memory and storage requirements

The Proxy

       Provides a surrogate or placeholder for another object to control access to it.
       When to use it ?
                 -   Whenever there is a need for a more versatile or sophisticated reference to an
                     object than a simple pointer.




      If you appreciate this document make a donation to a worldwide
children association or organization. I suggest the SOS association. This
document has been downloaded from the http://achraf.sfaxi.perso.sfr.fr space
; you can use and broadcast it for non lucrative purposes. Further
information are available upon request.


      Si vous appréciez ce document faites un don pour le compte d’une
association ou une organisation qui s’occupe des enfants. Je recommande
l’association    SOS.      Ce     document      est    disponible   sur
http://achraf.sfaxi.perso.sfr; son utilisation ainsi que sa propagation
pour des fins non lucratives sont gratuite




achraf.sfaxi.perso.sfr.fr                                                                                6

Contenu connexe

Similaire à The 23 gof design patterns in java ,the summary

Design Pattern Notes: Nagpur University
Design Pattern Notes: Nagpur UniversityDesign Pattern Notes: Nagpur University
Design Pattern Notes: Nagpur UniversityShubham Narkhede
 
common design patterns summary.pdf
common design patterns summary.pdfcommon design patterns summary.pdf
common design patterns summary.pdfNikolayRaychev2
 
Pavel_Kravchenko_Mobile Development
Pavel_Kravchenko_Mobile DevelopmentPavel_Kravchenko_Mobile Development
Pavel_Kravchenko_Mobile DevelopmentCiklum
 
Review oop and ood
Review oop and oodReview oop and ood
Review oop and oodthan sare
 
Solid principles, Design Patterns, and Domain Driven Design
Solid principles, Design Patterns, and Domain Driven DesignSolid principles, Design Patterns, and Domain Driven Design
Solid principles, Design Patterns, and Domain Driven DesignIrwansyah Irwansyah
 
All 23 Design patterns in one page front and back
All 23 Design patterns in one page front and backAll 23 Design patterns in one page front and back
All 23 Design patterns in one page front and backTrey Brister
 
C# Advanced L07-Design Patterns
C# Advanced L07-Design PatternsC# Advanced L07-Design Patterns
C# Advanced L07-Design PatternsMohammad Shaker
 
Major and Minor Elements of Object Model
Major and Minor Elements of Object ModelMajor and Minor Elements of Object Model
Major and Minor Elements of Object Modelsohailsaif
 
Introduction to Object Oriented Concepts
Introduction to Object Oriented Concepts Introduction to Object Oriented Concepts
Introduction to Object Oriented Concepts Mamoun Nawahdah
 
Basic design pattern interview questions
Basic design pattern interview questionsBasic design pattern interview questions
Basic design pattern interview questionsjinaldesailive
 
Jump start to OOP, OOAD, and Design Pattern
Jump start to OOP, OOAD, and Design PatternJump start to OOP, OOAD, and Design Pattern
Jump start to OOP, OOAD, and Design PatternNishith Shukla
 
Jump Start To Ooad And Design Patterns
Jump Start To Ooad And Design PatternsJump Start To Ooad And Design Patterns
Jump Start To Ooad And Design PatternsLalit Kale
 
Object Oriented Principles
Object Oriented PrinciplesObject Oriented Principles
Object Oriented PrinciplesEmprovise
 

Similaire à The 23 gof design patterns in java ,the summary (20)

Design Pattern Notes: Nagpur University
Design Pattern Notes: Nagpur UniversityDesign Pattern Notes: Nagpur University
Design Pattern Notes: Nagpur University
 
OOP design patterns
OOP design patternsOOP design patterns
OOP design patterns
 
Design patterns
Design patternsDesign patterns
Design patterns
 
common design patterns summary.pdf
common design patterns summary.pdfcommon design patterns summary.pdf
common design patterns summary.pdf
 
Design patterns
Design patternsDesign patterns
Design patterns
 
designpatterns-.pdf
designpatterns-.pdfdesignpatterns-.pdf
designpatterns-.pdf
 
Pavel_Kravchenko_Mobile Development
Pavel_Kravchenko_Mobile DevelopmentPavel_Kravchenko_Mobile Development
Pavel_Kravchenko_Mobile Development
 
Review oop and ood
Review oop and oodReview oop and ood
Review oop and ood
 
Solid principles, Design Patterns, and Domain Driven Design
Solid principles, Design Patterns, and Domain Driven DesignSolid principles, Design Patterns, and Domain Driven Design
Solid principles, Design Patterns, and Domain Driven Design
 
All 23 Design patterns in one page front and back
All 23 Design patterns in one page front and backAll 23 Design patterns in one page front and back
All 23 Design patterns in one page front and back
 
01. design pattern
01. design pattern01. design pattern
01. design pattern
 
C# Advanced L07-Design Patterns
C# Advanced L07-Design PatternsC# Advanced L07-Design Patterns
C# Advanced L07-Design Patterns
 
Design patterns in Javascript
Design patterns in JavascriptDesign patterns in Javascript
Design patterns in Javascript
 
Major and Minor Elements of Object Model
Major and Minor Elements of Object ModelMajor and Minor Elements of Object Model
Major and Minor Elements of Object Model
 
Object modeling
Object modelingObject modeling
Object modeling
 
Introduction to Object Oriented Concepts
Introduction to Object Oriented Concepts Introduction to Object Oriented Concepts
Introduction to Object Oriented Concepts
 
Basic design pattern interview questions
Basic design pattern interview questionsBasic design pattern interview questions
Basic design pattern interview questions
 
Jump start to OOP, OOAD, and Design Pattern
Jump start to OOP, OOAD, and Design PatternJump start to OOP, OOAD, and Design Pattern
Jump start to OOP, OOAD, and Design Pattern
 
Jump Start To Ooad And Design Patterns
Jump Start To Ooad And Design PatternsJump Start To Ooad And Design Patterns
Jump Start To Ooad And Design Patterns
 
Object Oriented Principles
Object Oriented PrinciplesObject Oriented Principles
Object Oriented Principles
 

The 23 gof design patterns in java ,the summary

  • 1. GOF Design Patterns, The summary by Achraf SFAXI IS System Architect Consultant SUN Certified Professional August 2006 The creational one’s specialize in abstracting the instation process. They help in isolating how objects are created, composed and represented from the rest of the system. They are five patterns defined in this category: Abstract Factory, Builder, Factory Method, Prototype, Singleton. The Abstract Factory  The Abstract Factory provides an interface for creating families of related or dependent objects without specifying their concrete classes.  When to use it ? - The system should be independent of how its products are created, composed and represented - A family of related product objects is designed to be used togetheran and we need to enforce this constraint. - We need to provide a class library of products and we want to reveal just their interfaces, not their implementations The Builder  The goal of the Builder design pattern is to separate the construction of a complex object from its representations.  When to use it ? - The algorithm for creating a complex object should be independent of the parts that make up the object and who they are assembled. - The construction process must allow different representations for the constructed object. achraf.sfaxi.perso.sfr.fr 1
  • 2. The Factory Method  The Factory Method defines an interface for creating an object but lets subclasses decide which class to instanciate. Factory method lets a class defer instantiation to subclasses.  When to use it ? - A class cannot anticipate the class of objects it must create. A class wants its subclasses to specify the objects it creates. The Prototype  The prototype specifies the kinds of objects to create using a prototypical instance and creates new objects by copying this prototype.  When we use it ? - The classes to instanciate are specified at runtime, for example, by dynamic loading. - We have to avoid building a class hierarchy of factories that parallels the class hierarchy of products. - Instances of a class can have only a few different combinations of state The Singleton  The singleton ensures that a class has only one instance and provides a global point of access to that class.  When to use it ? - The must be exactly one instance of a class and it must be accessible to clients from a well-known access point. The Behavioral one’s Behavioral patterns are concerned with algorithms and the assignement of responsibilities to objects. They document the patterns of objects as well as the patterns of communication between them. They are eleven patterns defined in this category : Chain of responsibility, Command, Interpreter, Iterator, Mediator, Memento, Observer, State, strategy, Template Method and Visitor. The Chain of responsibility  Avoid coupling the sender of a request to its receiver by giving more than one object a chance to handle the request. Chains the receiving objects and passes the request along the chain until an object handles it  Reduced coupling  Added flexibility in assigning responsibilities to objects.  When to use it ?  More than one object can handle a request, and the handler isn’t known. - The set of objects that can handle a request should be specified dynamically The Command  The Comand encapsulates a request as an object.  When to use it ? achraf.sfaxi.perso.sfr.fr 2
  • 3. - When it is necessary to issue requests to objects without knowing anything about the operation being requested or the receiver of the request. - You specify queue and execute requests at different times. - You must support undo, logging or transactions The Interpreter  Given a language, defines a representation for its grammar along with an interpreter that uses the representation to interpret sentences in the language.  When to use it ? - The grammar of the language is simple - Efficiency is not a critical concern The Iterator  The Iterator provides a way to access the elements of an aggregate object sequentially without exposing its underlying representation.  When to use it ? - We want to access a collection object’s contents without exposing its internal representation. - Provide a uniform interface for traversing different structures in a collection. The Mediator  The Mediator defines an object that encapsulates how a set of objects interacts. In a complex object structure where they are many connection between objects, every object must has knowledge of the other. We can avoid this by defining a separate mediator object that is responsible for controlling and coordinating the interaction of a group of objects (like a router for a network hosts).  When to use it ? - A set of objects of objects communicates in well-defined but complex ways. - Reusing an object is difficult because it refers to and communicates with many objects The Memento  Violating encapsulation, the Memento pattern captures and externaliszes an object’s internal state so that the object can be restored to this state later.  A Memento is an object that stores a snapshot of the internal state of another object (the Momento’s originator).  When to use it ? - A snapshot of an object’s state must be saved so it can be restored to that state later - A direct interface to obtain the state would expose implementation details and break the object’s encapsulation The Observer  The Observer defines a one-to-many dependency between objects so that when one object changes state, all its dependents are automatically notified and updated.  When to use it ? achraf.sfaxi.perso.sfr.fr 3
  • 4. - A need to support the broadcast communication. - A change to one object requires changing others and we don’t know how many objects need to be changed. - An object should be able to notify other objects without making assumptions about who these objects are. The State  Allows an object to alter its behavior when its internal state changes. The object will appear to change its class.  When to use it ? - An object’s behavior depends on its state and it must change its behavior at runtime depending on that state. - Operations have large, multipart conditional statements that depend on the object’s state. The Strategy  The strategy pattern defines a group of classes that represent a set of possible behaviors. The functionality differs depending on the strategy (algorithm) chosen  When to use it ? - Many related classes differ only in their behavior - We need different variants of an algorithm The template Method  The Template Method defines the skeleton of an algorithm in an operation defining some steps to subclasses. The Template Method pattern lets subclasses redefine certain steps of an algorithm without changing the algorithm’s structure.  A template method defines an algorithm in terms of abstract operations that subclasses override to provide concrete behavior.  When to use it ? - to implement the invariant parts of an algorithm once and leave it up to subclasses to implement the behavior that can vary The Visitor  The Visitor pattern provides a maintainable, easy way to represent an oeration to be performed on the elements of an object structure. New operations can be defined without changing the classes of the elements on which it operates.  When to use it ? - when we need to make adding new operations easy. - when the classes defining the object structure rarely change, but we often want to define new operations over thje structure. The Structural Patterns The Structural patterns are concerned with how classes and objects are composed to form larger structures. achraf.sfaxi.perso.sfr.fr 4
  • 5. Seven patterns are defined in this category : Adapter, Bridge, Composite, Decorator, Façade, Flyweight and Proxy. The Adapter  The Adapter design pattern defines an intermediary between two classes, converting the interface of one class so it can be used with the other. This enables classes with incompatible interfaces to work together. Let us say that it adapts a class to work with another one by making the two-classes interfaces compatible.  When to use it ? - when we need to allow one or more incompatible objects to communicate and interact - when we need to improve reusability of older functionality The Bridge  Decouples an abstraction from its implementation, so the two can vary independently.  When to use it ? - When we need to avoid a permanent binding between an abstraction and its implementation (decouple interface and implementation) - When want to have both abstractions and their implementations extensible using subclasses. The Composite  Composite pattern combines objects into tree structures to represent either the whole hierarchy or a part of the hierarchy. This recursive composition allows clients to treat individual objects and compositions of objects uniformly.  When to use it ? - when we want to represent part-whole hierarchies of objects - when we want clients to be able to ignore the difference between compositions of objects and individual objects. The Decorator  It attaches additional responsibilities to an object dynamically.  Decorators provide a flexible alternative to subclassing for extending functionality.  When to use it ? - When we want to add responsibilities ton individual objects dynamically and transparently, that is, without affecting other objects - When we want to add responsibilities that can be withdraw later - When extension by subclassing is impractical The Facade  Provide a unified interface to a set of interfaces in a subsystem. Façade defines a hieigher level interface that makes the subsystem easier to use (because we only have to deal with one interface to communicate with the subsystem).  When we use it ? - we want to provide a simple interface to a complex subsystem achraf.sfaxi.perso.sfr.fr 5
  • 6. - There are many dependencies between clients and the implementation classes of an abstraction. The Flyweight  It uses sharing to support a large number of fine-grained objects efficiently. The flyweight pattern uses a shared flyweight object that can be used in multiple contexts simultaneously. The flyweight has a shareable intrinsic state extrinsic state consisting of information independent of the flyweight’s context and a non shareable flyweight’s context. Client objects are responsible for passing extrinsic state to the flyweight when it needs it.  When to use it ? - When an application uses a large number of objects. - When storage cost high because of the high number of objects - When most of the objects state can be made extrinsic - When many groups of objects may be replaced by relatively few shared objects, once extrinsic state is removed. - The benefits of using the flyweight design pattern are, essentially, reducing the number of objects to handle and reducing the memory and storage requirements The Proxy  Provides a surrogate or placeholder for another object to control access to it.  When to use it ? - Whenever there is a need for a more versatile or sophisticated reference to an object than a simple pointer. If you appreciate this document make a donation to a worldwide children association or organization. I suggest the SOS association. This document has been downloaded from the http://achraf.sfaxi.perso.sfr.fr space ; you can use and broadcast it for non lucrative purposes. Further information are available upon request. Si vous appréciez ce document faites un don pour le compte d’une association ou une organisation qui s’occupe des enfants. Je recommande l’association SOS. Ce document est disponible sur http://achraf.sfaxi.perso.sfr; son utilisation ainsi que sa propagation pour des fins non lucratives sont gratuite achraf.sfaxi.perso.sfr.fr 6