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 still continues to be an Amazon best seller.
The GoF wrote the book in a C++ context but it still 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 to provide relationship between objects; and finally, Behavioral Patterns to help define how objects interact.
Gang of Four Design Patterns
Creational Design Patterns
- Abstract Factory. Allows the creation of objects without specifying their concrete type.
- Builder. Uses 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.
Piyush
When there are only 3 categories why call it GANG OF FOUR?
jt
“Gang of Four” refers to the four authors of the book – Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides.
RAVI
because these designe patren deovloped by 4 people
Shankar Krishna
No that reason bro..a book called design patterns : elements of reusable oo software was written by 4 persons namely,erich gamma, richart helm, ralph johnson and vlissides..
Me
There are four authors — anyway if that was the question you ask this isn’t the reading material for you
Aridane
Curiosity is a must for good developers and sarcasm it’s side effect.
Jerim Kaura
Published by Four Authers
Nikhil Rao
Reason : Four People published that Book.
Alex
Well, I see it’s kinda a trend here to repeat to this guy that it is 4 authors, not groups of patterns, so …
Dude, you got it wrong! GoF means 4 authors! Stupid
bhural
because the creators of GOF were 4 people
OOVII
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.
jt
Thanks!
Thamizhelango
Thanks John, For explaining Design patterns with excellent examples.
Jochen
Give one more i to the visitor in your last line 😉
Gavin Beere
Hi John,
Could you please tell me exactly which patterns are being used in a simple spring application. (Basic CRUD functionality)
Regards,
Gavin
coryplusplus
This post keeps me coming back to refresh my knowledge. Thanks so much!
AkashBabu
It’s a great place to learn design patterns for people who want to start implementing scalable applications!!
Thanks John, really appreciate your effort a lot!
justinekays
Finding a design pattern blog post that stitches together ideas has been challenging. This blog has become my go-to since I stumbled upon it. Really love your style of writing. If I’d to add one thing that could be improved, it would be adding pros/cons about the pattern.
Jules Manson
I have an idea for a GoF Design Patterns spin-off. A good suggested name might be:
Design Patterns II
Elements of Reusable Object-Oriented and Functional Javascript
(Spinoff greatly inspired by Gang-of-Four Design Patterns)
Inspired by original GoF Design Patterns a 2nd edition would be published citing all 23 or so commonly used or most important design patterns employing only JavaScript or related web development languages where Javascript examples are not appropriate for example CSS variables or serverless databases. A pro edition would also be available for other patterns (perhaps 32 in all) not in the original Design Patterns by GoF. Abstract to concrete real world examples would all be written from Vanilla to Neapolitan flavored Javascript. New edition would make very limited use of jQuery. Examples of in-the-wild popular libraries/frameworks would cite instances where they did it right and where they went wrong. Not a single use of the non-words “foo” and “bar” are printed anywhere in the book as such abstractions are so bland and meaningless that novice programmers often have difficulty grasping the core lessons behind them — novice programmers like me.
Several outstanding books have already been written for example Learning JavaScript Design Patterns (Volume 1.7.0 is completely free online) by Addy Osmani. But the examples are too bland for me. He should have kade use of more real-world examples especially from frameworks. There is also a great website called refactoring.guru giving one a taste of design patterns (also inspired by GoF) or the full book for a small price but he uses fucking cats and other dumb real-world objects to demonstrate use-cases in UML. UML is too much of an abstraction. Beginners to intermediate programmers need real-world example to really grasp the core ideas.
My programming skills are far too low to write/co-write or technically review such a book. But if said book were to be published l would be near the top of a very long list to acquire an initial beta release. I just wanted to throw that out there to get your thoughts.
What do you all think of this idea?
bruh moment
lmao NO.
Joshua Fields
Awesome idea. If “Chicken Soup for the Soul” can make spin-offs for everyone and their mother, why not GoF standards? Heck, make a book for each friking language. Trust me that you don’t really need technical know-how to write that book. You acquire the know-how as you write it… Do it!!
Srimathi
I agree with him
Vickey
Is there any architectural design pattern??
Ansh Sachdeva
Thanks for sharing such great knowledge.
Vinod
Hi, This simple explanation for all the design patterns helps me a lot to understand.
Madhusudan
In template method pattern, most of the examples show template method as final. Is it not necessary?
Robert Louis
Hi there. My Firefox Developer Edition browser shows this page with no border nor padding. It would be nicer if the text wasn’t touching the edge of the frame.
Karen
Woow I’ve worked with several of these patterns already, but I wouldn’t imagine this book was published in 1994. Thought many of the concepts were more recent. Definitely a must read.
Ashwini
Hello.
good post. I am interested in web design and your information on design patterns helped me a lot.
Thanks for sharing this with us.
George
I hated the Design Pattern book when it came out because I thought it was tedious (even as a C++ programmer) and too much of it was not as practical (a wise solution) for most frequently encountered problems. Unfortunately, everybody bought too much into it even though it contains many sound ideas. It seemed universally heralded and I believe a great many people bought the book and got nothing out of it. The book was ill-matched for too many that were advised to read it. A small “good parts” book, and more in pseudo-code, would have helped immensely more.