Gang of Four Design Patterns

GoF Design Patterns

Over 20 years ago the iconic computer science book “Design Patterns: Elements of Reusable Object-Oriented Software” was first published. The four authors of the book Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides have since been dubbed “The Gang of Four”. In technology circles you’ll often see this nicknamed shorted to GoF. Even though the GoF Design Patterns book was published over 20 years ago, it continues to be an Amazon best seller.

Even though the GoF authors wrote the book in a C++ context, the book remains very relevant to Java programming. C++ and Java are both object oriented languages. The GoF authors through their experience in coding large scale enterprise systems using C++ saw common patterns emerge. These design patterns are not unique to C++. The design patterns can be applied in any object oriented language. As a Java developer using the Spring Framework to develop enterprise class applications, you will encounter the GoF Design Patterns on a daily basis.

The GoF Design Patterns are broken into three categories: Creational Patterns for the creation of objects, Structural Patterns  provide for a relationship between objects and finally, Behavioral Patterns help define how objects interact.

Gang of Four Design Patterns

Creational Design Patterns

  • Abstract Factory. Allows for the creation of objects without specifying their concrete type.
  • Builder. Used to create complex objects.
  • Factory Method. Creates objects without specifying the exact class to create.
  • Prototype. Creates a new object from an existing object.
  • Singleton. Ensures only one instance of an object is created.

Structural Design Patterns

  • Adapter. Allows for two incompatible classes to work together by wrapping an interface around one of the existing classes.
  • Bridge. Decouples an abstraction so two classes can vary independently.
  • Composite. Takes a group of objects into a single object.
  • Decorator. Allows for an object’s behavior to be extended dynamically at run time.
  • Facade. Provides a simple interface to a more complex underlying object.
  • Flyweight. Reduces the cost of complex object models.
  • Proxy. Provides a placeholder interface to an underlying object to control access, reduce cost, or reduce complexity.

Behavior Design Patterns

  • Chain of Responsibility. Delegates commands to a chain of processing objects.
  • Command. Creates objects which encapsulate actions and parameters.
  • Interpreter. Implements a specialized language.
  • Iterator. Accesses the elements of an object sequentially without exposing its underlying representation.
  • Mediator. Allows loose coupling between classes by being the only class that has detailed knowledge of their methods.
  • Memento. Provides the ability to restore an object to its previous state.
  • Observer. Is a publish/subscribe pattern which allows a number of observer objects to see an event.
  • State. Allows an object to alter its behavior when its internal state changes.
  • Strategy. Allows one of a family of algorithms to be selected on-the-fly at run-time.
  • Template Method. Defines the skeleton of an algorithm as an abstract class, allowing its sub-classes to provide concrete behavior.
  • Visitor. Separates an algorithm from an object structure by moving the hierarchy of methods into one object.

Save

10 comments on “Gang of Four Design Patterns

  1. April 28, 2015 at 1:00 am

    When there are only 3 categories why call it GANG OF FOUR?

    Reply
    • April 28, 2015 at 5:14 am

      “Gang of Four” refers to the four authors of the book – Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides.

      Reply
  2. March 5, 2018 at 2:15 am

    John, appreciate your efforts in explaining GoF patterns in detail and also with great quality covering OO Design principles, etc.
    Your blog is one of the top best which covers these patterns.

    Thanks for sharing the knowledge.

    Reply
    • March 7, 2018 at 4:36 pm

      Thanks!

      Reply
  3. March 16, 2018 at 5:19 pm

    Thanks John, For explaining Design patterns with excellent examples.

    Reply
  4. March 27, 2018 at 7:54 am

    Give one more i to the visitor in your last line 😉

    Reply
  5. April 12, 2018 at 9:23 am

    Hi John,

    Could you please tell me exactly which patterns are being used in a simple spring application. (Basic CRUD functionality)

    Regards,

    Gavin

    Reply
  6. November 27, 2018 at 10:09 am

    This post keeps me coming back to refresh my knowledge. Thanks so much!

    Reply

Leave a Reply