Hi everyone, it is the first article of my Design Patterns series. In this series, we will understand almost everything related to Design Patterns. So let's start with an introduction.
In Software Engineering you may face the same design problems again and again and of course, there are many ways to solve these problems, but to avoid more problems in the future when you try to maintain your code, we need to use flexible and reusable solutions. One of these preferred solutions is that of design patterns.
A design pattern is a practical proven solution to a common design problem. It is like the best practices used by expert software engineers to solve this problem and these solutions help us to speed the process of development because you don't have to think, create and build a solution every time you face these problems. Also, a design pattern is not a standard piece of code that you just put in your code and the problem is solved, it is more like a model that you can modify to be suitable to use in your problem.
Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides are the authors of the famous book Design Patterns: Elements of Reusable Object-Oriented Software. They introduced 23 patterns of design in this book based on their experience as developers. Those patterns -which were introduced by GoF- are considered the foundation for all other patterns.
Gang of Four patterns can be categorized into three groups:
Creational Patterns help us to deal with creating or cloning new objects. Creational Patterns are:
- Factory Method
- Abstract Factory
- Object Pool
Structural Patterns help us to describe the connections between objects. These patterns relate to design principles of decomposition and generalization. Structural Patterns are:
- Private Class Data
Behavioral Patterns help us to describe how each object performs a single cohesive function and describe how independent objects work towards a common goal. Behavioral Patterns are:
- Chain of Responsibility
- Null Object
- Template method
The Gang of Four's book tells us that each pattern has four essential elements:
- The Name - Used to describe a design problem, its solutions, and consequences in a word or two.
- The Problem - describes when to apply the pattern and explains the problem and its context.
- The Solution - that describes the elements that make up the design, the relationships, the responsibilities, and collaborations. The solutions do not describe a concrete implementation, because a pattern is like a template that can be applied in many different situations, but provides an abstract description of a design problem and how a general arrangement of elements (classes and objects) solves it.
- The consequences - the results of applying the pattern.
There are many reasons to use design patterns. As we said before it makes the process of implementation faster because we don't have to think and build a solution for a problem every time we face it. It also defines a common language to make it easier to communicate between team members.
In this article, we give a quick introduction to design patterns and discussed categories of design patterns, elements of each pattern, and why we should use design patterns. In the following articles, we will talk in detail about each pattern and how to use design patterns.