Top 10 Javascript Pattern mọi Lập trình viên hàng đầu yêu thích

Ngày đăng: 24/07/2019   -    Cập nhật: 23/10/2020
Pattern hay Design Pattern là gì?

Theo Wiki, Design PatternMẫu thiết kế. Một mẫu thiết kế phần mềm đã được các chuyên gia thiết kế và chứng minh rằng nó tối ưu nhất cho vấn đề nào đó.

Design Pattern không phải là một thiết kế đã hoàn chỉnh để bạn Copy -> Paste rồi chạy chương trình.

Nó là một mô tả hoặc mẫu hướng dẫn làm thế nào để giải quyết một vấn đề trong nhiều tình huống khác nhau.

Các Mẫu thiết kếBest Practices (cách làm tốt nhất) mà các lập trình viên có thể dùng để giải quyết các vấn đề phổ biến khi thiết kế một phần mềm.

Javascript Pattern thì là các mẫu thiết kế dành riêng cho Javascript.

Dưới đây là TOP 10 Javascript Pattern mà mọi Lập trình viên hàng đầu thích sử dụng:


Top 10 Javascript Pattern

Top 10 Javascript Pattern

1. Constructor Pattern | TOP 10 Javascript Pattern


Trong các ngôn ngữ lập trình hướng đối tượng cổ điển, hàm tạo (Constructor) là một phương thức đặc biệt được sử dụng để khởi tạo một đối tượng mới được tạo sau khi bộ nhớ đã được cấp phát cho nó.

Trong JavaScript hầu hết mọi thứ là một đối tượng (object), nên chúng ta thường quan tâm nhất đến các hàm tạo đối tượng (object constructor).

> Có thể bạn muốn biết: Tất tần tật về Constructor trong Java 

Vì các hàm tạo đối tượng được sử dụng để tạo các loại đối tượng cụ thể, ví dụ:


  • Chuẩn bị đối tượng để sử dụng
  • Chấp nhận đối số mà hàm tạo có thể sử dụng để đặt giá trị của các thuộc tính và phương thức thành viên khi đối tượng được tạo lần đầu tiên

Top 10 Javascript Pattern: Constructor Pattern

Top 10 Javascript Pattern: Constructor Pattern
 
Bên trong một hàm tạo, từ khóa this tham chiếu đến đối tượng mới đang được tạo để xem lại việc tạo đối tượng, một hàm tạo cơ bản có thể trông như sau:

function Car(model, year, miles) {
  this.model = model;
  this.year = year;
  this.miles = miles;
}

// Usage:
var bmw = new Car('M4', '2019', '1000');

 

2. Module Pattern | TOP 10 Javascript Pattern


Các Module là một phần không thể thiếu của bất kỳ kiến ​​trúc ứng dụng mạnh mẽ nào và Module - Pattern thường giúp giữ cho mã nguồn của dự án được Clean.


Có một số tùy chọn để thực hiện các module. Bao gồm các:

  • Object literal notation
  • The module Pattern
  • AMD modules
  • CommonJS module
  • ECMAScript Harmony modules

Object literals:

var newObject = {
  variableKey: variableValue,
  functionKey: function() {
    //…
  }
};


Module - Pattern:

Top 10 Javascript Pattern: Module Pattern

Top 10 Javascript Pattern: Module Pattern


Chúng ta hãy thử xem xét việc triển khai Module - Pattern bằng cách tạo một Module độc lập.

var testModule = (function() {
  var counter = 0;
  return {
    incrementCounter: function() {
      return ++counter;
    },
    resetCounter: function() {
      counter = 0;
    }
  };
})();

// Usage:
testModule.incrementCounter();
testModule.resetCounter();

 

3. Revealing Module Pattern | TOP 10 Javascript Pattern


Một điều mà Revealing Module có thể làm là tránh lặp lại tên của main object khi chúng ta muốn gọi một phương thức public từ phương thức khác hoặc truy cập các biến public.

var myRevealingModule = (function() {
  var privateVariable = 'not okay',
    publicVariable = 'okay';
  function privateFun() {
    return privateVariable;
  }

  function publicSetName(strName) {
    privateVariable = strName;
  }

  function publicGetName() {
    privateFun();
  }

  return {
    setName: publicSetName,
    message: publicVariable,
    getName: publicGetName
  };
})();

//Usage:

myRevealingModule.setName('Marvin King');

4. Singleton Pattern | TOP 10 Javascript Pattern


Do đó, Singletons Pattern được biết đến vì nó hạn chế khởi tạo một lớp thành một đối tượng.

Singletons khác với các static class vì chúng ta có thể trì hoãn việc khởi tạo chúng. Nói chung vì chúng yêu cầu một số thông tin có thể không có sẵn trong thời gian khởi tạo.

Đối với mã không biết về tham chiếu trước đó, chúng không cung cấp phương thức để dễ dàng truy xuất.

Chúng ta hãy xem cấu trúc của singleton:


var singletonPattern = (function() {
  var instance;
  function init() {
    // Singleton
    function privateMethod() {
      console.log('privateMethod');
    }
    var privateVariable = 'this is private variable';
    var privateRandomNumber = Math.random();
    return {
      publicMethod: function() {
        console.log('publicMethod');
      },
      publicProperty: 'this is public property',
      getRandomNumber: function() {
        return privateRandomNumber;
      }
    };
  }

  return {
    // Get the singleton instance if one exists
    // or create if it doesn't
    getInstance: function() {
      if (!instance) {
        instance = init();
      }
      return instance;
    }
  };
})();

// Usage:
var single = singletonPattern.getInstance();

5. Observer Pattern | TOP 10 Javascript Pattern


Observer Pattern là một mẫu thiết kế trong đó một đối tượng duy trì một danh sách các đối tượng tùy thuộc vào người quan sát, tự động thông báo cho họ về bất kỳ trạng thái thay đổi nào.

Top 10 Javascript Pattern: Observer Pattern
Top 10 Javascript Pattern: Observer Pattern

  • Subject: Duy trì một danh sách các quan sát viên, các cơ sở thêm hoặc loại bỏ các quan sát viên
  • Observer: Cung cấp interface cập nhật cho đối tượng cần được thông báo về sự thay đổi trạng thái của đối tượng
  • ConcreteSubject: Phát thông báo cho Quan sát viên về những trạng thái thay đổi, lưu trữ trạng thái của ConcreteObservers
  • ConcreteObserver: Lưu trữ một tham chiếu đến ConcreteSubject, triển khai update interface cho Quan sát viên để đảm bảo trạng thái phù hợp với các đối tượng.

function ObserverList() {
  this.observerList = [];
}

ObserverList.prototype.Add = function(obj) {
  return this.observerList.push(obj);
};

ObserverList.prototype.Empty = function() {
  this.obsererList = [];
};

ObserverList.prototype.Count = function() {
  return this.observerList.length;
};

ObserverList.prototype.Get = function(index) {
  if (index > -1 && index < this.observerList.length) {
    return this.observerList[index];
  }
};

//...

Khi một Subject cần thông báo cho Observer về điều gí đó xảy ra, nó sẽ phát thông báo cho Observer (bao gồm cả dữ liệu cụ thể liên quan đến chủ đề của thông báo)

Khi chúng ta không còn muốn cho một Observer cụ thể nhận thông báo về những thay đổi của Subject mà nó được đăng ký, Subject có thể xóa nó khỏi danh sách Observers.

Trong các bài viết khác, tôi sẽ nói nhiều hơn về tính năng làm thế nào mà Observer được sử dụng rộng rãi trong JavaScript.


6. Mediator Pattern | TOP 10 Javascript Pattern


Top 10 Javascript Pattern: Mediator Pattern

Top 10 Javascript Pattern: Mediator Pattern

Nếu xuất hiện một hệ thống có quá nhiều mối quan hệ trực tiếp giữa các components thì...

Có lẽ đã đến lúc cần có một trung tâm điều khiển để các 
components giao tiếp.

Mediator Pattern thúc đẩy sự liên kết lỏng lẻo này bằng cách đảm bảo các components tham chiếu lẫn nhau một cách rõ ràng.


var mediator = (function() {
  var topics = {};
  var subscribe = function(topic, fn) {
    if (!topics[topic]) {
      topics[topic] = [];
    }
    topics[topic].push({ context: this, callback: fn });
    return this;
  };

  // publish/broadcast an event to the rest of the application
  var publicsh = function(topic) {
    var args;
    if (!topics[topic]) {
      return false;
    }
    args = Array.prototype.slice.call(arguments, 1);
    for (var i = 0, l = topics[topic].length; i < l; i++) {
      var subscription = topics[topic][i];
      subscription.callback.apply(subscription.content, args);
    }
    return this;
  };
  return {
    publish: publish,
    subscribe: subscribe,
    installTo: function(obj) {
      obj.subscribe = subscribe;
      obj.publish = publish;
    }
  };
})();

7. Prototype Pattern | TOP 10 Javascript Pattern


Một trong những lợi ích của việc sử dụng Prototype Pattern là chúng ta đã làm việc nhiều với các ưu điểm của Prototype mà JavaScript cung cấp một cách tự nhiên thay vì cố gắng bắt chước các tính năng của các ngôn ngữ khác.

Hãy xem ví dụ:


var myCar = {
  name: 'bmw',
  drive: function() {
    console.log('I am driving!');
  },
  panic: function() {
    console.log('wait, how do you stop this thing?');
  }
};

//Usages:

var youcar = Object.create(Car);

console.log(yourcar.name); //'bmw'

8. Factory Pattern | TOP 10 Javascript Pattern


Factory Pattern có thể cung cấp một generic interface để tạo các đối tượng, trong đó chúng ta có thể chỉ định loại factory object mà chúng ta muốn tạo.

Hãy xem sơ đồ bên dưới:


Top 10 Javascript Pattern: Factory Pattern

Top 10 Javascript Pattern: Factory Pattern


function Car(options) {
    this.doors = options.doors || 4;
    this.state = options.state || "brand new";
    this.color = options.color || "silver";
}

9. Mixin Pattern | TOP 10 Javascript Pattern


Mixins là các class cung cấp chức năng có thể dễ dàng được kế thừa bởi một class con hoặc nhóm các lớp con cho mục đích tái sử dụng hàm.

var Person = function(firstName, lastName) {
  this.firstName = firstName;
  this.lastName = lastName;
  this.gender = 'male';
};

var clark = new Person('Clark', 'kent');

var Superhero = function(firstName, lastName, powers) {
  Person.call(this.firstName, this.lastName);
  this.powers = powers;
};

SuperHero.prototyp = Oject.create(Person.prototype);
var superman = new Superhero('Clark', 'Kent', ['flight', 'heat-vision']);

console.log(superman); //output personal attributes as well as power

Trong trường hợp này, Superhero có khả năng ghi đè bất kỳ giá trị được kế thừa nào với các giá trị cụ thể cho đối tượng của nó.

Top 10 Javascript Pattern: Mixin Pattern

Top 10 Javascript Pattern: Mixin Pattern

10. Decorator Pattern | TOP 10 Javascript Pattern


Các Decorator Pattern là một structural design pattern nhằm mục đích thúc đẩy việc tái sử dụng code.

Tương tự như Mixins, chúng có thể được coi là một phương án khả thi khác để phân lớp đối tượng.



Đặc biệt, Decorators cung cấp khả năng thêm hành vi cho các lớp hiện có trong hệ thống một cách linh hoạt.

Ý tưởng là bản thân Decoration không cần thiết cho chức năng cơ bản của class.

Hãy xem cách Decorator hoạt động trong JavaScript như thế nào.


function MacBook() {
    this.cost=function() { return 997; }
    this.screenSize = function() { reutnr 11.6; }
}

// Decorator 1

function Memory( macbook ) {
    var v = macbook.cost();
    macbook.cost = function() {
      return v + 75;
    };
}

// Decorator 2

function Engraving( macbook ) {
    var v = macbook.cost();
    macbook.cost = function() {
        return v + 200;
    };
}

// Decorator 3

function Insturance( macbook ) {
    var v = macbook.cost();
    macbook.cost = function() {
        return v + 250;
    };
}

var mb = new MacBook();

Memory(mb);
Engraving(mb);
Insturance(mb);

mb.cost(); // 1522

Tổng kết


Có thể không nên sử dụng tất cả Javascript Pattern cho dự án của bạn mà chỉ cần 1 pattern như Observer Pattern để mang lại hiệu quả tốt (mình ví dụ thế)

Quan trọng, khi sử dụng Design Pattern thì phải hiểu rõ các vấn đề mà Pattern phù hợp nhất.

Sử dụng Pattern phù hợp cũng khiến bạn dễ dàng tích hợp chúng vào ứng dụng của mình và khi sử dụng phù hợp: Lợi ích mà Pattern mang lại là rất lớn.


Jay Chow
 

> Ngoài Javascript Pattern Bạn cũng sẽ được giới thiệu về Pattern khác khi HỌC LẬP TRÌNH JAVA WEB tại NIIT - ICT Hà Nội.

---
HỌC VIỆN ĐÀO TẠO CNTT NIIT - ICT HÀ NỘI
Học Lập trình chất lượng cao (Since 2002). Học làm Lập trình viên. Hành động ngay!
Đc: Tầng 3, 25T2, N05, Nguyễn Thị Thập, Cầu Giấy, Hà Nội
SĐT: 02435574074 - 0914939543
Email: hello@niithanoi.edu.vn
Fanpage: https://facebook.com/NIIT.ICT/
 
#niit #niithanoi #niiticthanoi #hoclaptrinh #khoahoclaptrinh #hoclaptrinhjava #hoclaptrinhphp

Bình luận Facebook
Khóa học liên quan đến bài viết

Khóa học PHP Full stack [2023] cho người mới bắt đầu

96 giờ
Khóa học Lập trình PHP Full stack, phiên bản cập nhật lần thứ 8. Dạy Lập trình PHP bài bản từ Front end đến Back end + Laravel. Hướng dẫn làm 2 Dự Án Web lớn

KHÓA HỌC PYTHON HƯỚNG ĐỐI TƯỢNG

50 giờ
Khóa học giúp học viên sử dụng thành thạo ngôn ngữ Lập trình Python (3x). Hiểu và phát triển được Ứng dụng Web với Django Framework. Học thực hành với Giảng viên cao cấp.

Lập trình PHP với Laravel Framework

42 giờ
Khóa học Lập trình PHP với Laravel Framework được NIIT - ICT HÀ NỘI xây dựng nhằm hoàn thiện kỹ năng lập trình web các các bạn đã biết Lập trình Web PHP thuần.

Khóa học Java Full stack (IJFD)

104 giờ
Học lập trình Java Fullstack với khóa học được xây dựng theo lộ trình bài bản, từ JAVA CƠ BẢN đến JAVA WEB và nâng cao về JAVA FRAMEWORK như: Spring Boot, Hibernate
Mục lục
Đăng ký tư vấn
Nhân viên gọi điện tư vấn miễn phí sau khi đăng ký
Được cập nhật các ưu đãi sớm nhất
Hotline: 0383180086
Tên không được để trống
Số điện thoại không được để trống
Email không được để trống
Hãy đăng ký để nhận những thông tin mới nhất về học bổng mới nhất tại NIIT - ICT Hà Nội
top
Đóng lại Đăng ký học tại NIIT - ICT Hà Nội
6260+ học viên đã theo học tại NIIT - ICT Hà Nội và có việc làm tốt trong ngành lập trình. Nắm lấy cơ hội ngay hôm nay!
Chọn khóa học
  • KHÓA HỌC LẬP TRÌNH FRONT END VỚI REACT.JS
  • KHÓA HỌC LẬP TRÌNH PHP WEB
  • Khóa học PHP Full stack [2023] cho người mới bắt đầu
  • Khóa học BIG DATA với Hadoop và Spark
  • Khóa học Lập trình Android tại Hà Nội
  • [Tuyển sinh 2023] Lập trình viên Quốc tế DigiNxt
  • Khóa học Tiền lương & Phúc lợi (C&B Excel) tại Hà Nội
  • LẬP TRÌNH GAME
    • Khóa học Lập trình Game Unity
  • LẬP TRÌNH WEB FRONT END
    • KHÓA HỌC PYTHON HƯỚNG ĐỐI TƯỢNG
    • KHÓA HỌC ANGULAR & TYPESCRIPT (FRONT END)
  • LẬP TRÌNH WEB BACK END
    • LẬP TRÌNH JAVA WEB VỚI FRAME WORK
    • Lập trình Web với Django
    • Lập trình PHP với Laravel Framework
  • CHƯƠNG TRÌNH ĐÀO TẠO ỨNG DỤNG CÔNG NGHỆ
    • Khóa học Tiền lương & Phúc lợi (C&B Excel) tại TP HCM
  • LẬP TRÌNH WEB FULL STACK
    • Khóa học Java Full stack (IJFD)
  • LẬP TRÌNH MOBILE
    • FRONT-END VỚI REACTJS VÀ REACT NATIVE
    • Lập trình Android Nâng cao
  • ĐÀO TẠO CHO DOANH NGHIỆP
    • KHÓA HỌC BUSINESS ANALYSIC TỪ CƠ BẢN ĐẾN NÂNG CAO 2023
    • Khóa học Magento: Làm chủ CMS TMĐT lớn nhất
    • Khóa học IOT: Xây dựng Sản phẩm IOT với Raspberry Pi
    • Khóa học Automation Testing Chuyên nghiệp
  • KHÓA HỌC DỰ ÁN
    • Học sử dụng bộ Office: Word, Excel, Power Point, Mail chuyên nghiệp
  • KHÓA HỌC KHÁC
    • VBA Excel Toàn Tập (Cơ Bản - Nâng Cao)
    • VBA Excel Nâng cao
    • Khóa học JMeter: Performance Testing
    • Khóa học Tester đạt chuẩn Quốc tế ISTQB Foundation Level
    • Khoá Học Tester đạt chuẩn quốc tế ISTQB Advanced Level
Bạn chưa chọn khóa học cần đăng ký
Tên không được để trống
Số điện thoại không được để trống
Email không được để trống
Đăng ký học thành công!
Cảm ơn bạn đã đăng ký học tại NIIT - ICT HÀ NỘI!