Open In App

JavaScript Design Patterns

JavaScript design patterns are a set of recurring solutions for common problems that developers face when creating applications using JavaScript. These patterns are essentially tried and tested templates that can be reused to solve similar problems in the future.

Many developers have documented their solutions to these problems over time, and as more and more people began to use them, they became widely accepted as a standard way of problem-solving. This led to the term “design patterns” being coined to describe them.



As the importance of design patterns became better understood, they were further developed and standardized. Today, most modern design patterns have a defined structure and are organized into multiple categories. They are also commonly taught as independent topics in computer science-related degrees.

In this JavaScript Design Patterns article, You’ll learn various types of Design Patterns like creational patterns, structural patterns, and behavioral patterns along with coding examples provided by JavaScript.

JavaScript Design Patterns

Classification of JavaScript Design Patterns

Now let us study each one of these three methods in a very manner, i.e. by covering some of the major points briefly.

1. JavaScript Creational Design Pattern

These patterns deal with the object-creation mechanism. They try to create objects in a manner that is suitable for a particular situation.

Following is the list of some of the JavaScript Creational Design Patterns, along with their brief description-

2. JavaScript Structural Design Pattern

This design pattern allows us to know how the classes and the objects created so far can be compared to form larger structures. This design pattern eases the design by identifying a simple way to realize relationships among entities.

Following is the list of some of the JavaScript Structural Design Patterns, along with their brief description-

3. JavaScript Behavioral Design Pattern

This design pattern identifies common communication patterns among objects. This actually increases flexibility in carrying out the communication.

Following is the list of some of the JavaScript Behavioral Design Patterns, along with their brief description-

Now after understanding each of the above-illustrated design patterns in a brief efficient manner let us move forward and see some of the coding examples which will help us to understand some of the above-mentioned design patterns of various different categories-

Benefits of JavaScript design patterns

Examples of JavaScript Design Patterns

Example 1:

In this example, we will see how the Builder design pattern, as well as the Chain of Responsibilities design pattern, works.




let Task = function (name, description) {
    this.name = name;
    this.description = description;
};
 
let TaskBuilder = function () {
    let name;
    let description;
 
    this.setName = function (name) {
        this.name = name;
        return this;
    };
    this.setDescription = function (description) {
        this.description = description;
        return this;
    };
 
    this.build = function () {
        return new Task(this.name, this.description);
    };
    return this;
};
 
let task = new TaskBuilder();
let object = task
    .setName("First Task")
    .setDescription("Study React and TypeScript")
    .build();
console.log(object);

Output:

Task { name: 'First Task', description: 'Study React and TypeScript' }

Example 2:

In this example, we will understand how does Proxy Design Pattern works. Here we will create a proxy method that actually works for the main method since it is responsible for all the output which user wants to display as a result.




function mainDisplayFunction() {
    this.getData = function (name) {
        if (name === "ABC") return 20000;
        else if (name === "DEF") return 5000;
        else return 0;
    };
}
 
function proxyDisplayFunction() {
    let object_1 = new mainDisplayFunction();
    let result_object = {};
    return {
        getData: function (name) {
            if (!result_object[name]) {
                result_object[name] = object_1.getData(name);
            }
            console.log(name + ": " + result_object[name]);
            return result_object[name];
        },
    };
}
 
function mainFunction() {
    let main_object = new proxyDisplayFunction();
    main_object.getData("ABC");
    main_object.getData("DEF");
    main_object.getData("Apple");
}
 
mainFunction();

Output:

ABC: 20000
DEF: 5000
Apple: 0


Article Tags :