Thứ hai, 21/09/2020 | 00:00 GMT+7

Mẫu thiết kế Singleton trong JavaScript


Một phần của Loạt bài: Các mẫu thiết kế JavaScript

Mọi nhà phát triển đều cố gắng viết mã có thể bảo trì, đọc được và có thể tái sử dụng. Cấu trúc mã trở nên quan trọng hơn khi các ứng dụng trở nên lớn hơn. Các mẫu thiết kế tỏ ra rất quan trọng để giải quyết thách thức này - cung cấp một cấu trúc tổ chức cho các vấn đề chung trong một hoàn cảnh cụ thể.

Mẫu thiết kế bên dưới chỉ là một trong nhiều mẫu hữu ích có thể giúp bạn thăng cấp với quyền là nhà phát triển JavaScript. Để biết toàn bộ, hãy xemMẫu thiết kế JavaScript .

Một Singleton chỉ cho phép một khởi tạo duy nhất, nhưng nhiều thể hiện của cùng một đối tượng. Singleton hạn chế client tạo nhiều đối tượng, sau khi đối tượng đầu tiên được tạo, nó sẽ trả về các thể hiện của chính nó.

Việc tìm kiếm các trường hợp sử dụng cho Singletons rất khó đối với hầu hết những người chưa sử dụng nó trước đó. Một ví dụ là sử dụng máy in văn phòng. Nếu có mười người trong một văn phòng và tất cả đều sử dụng một máy in, thì mười máy tính dùng chung một máy in (ví dụ). Bằng cách chia sẻ một máy in, họ chia sẻ cùng một tài nguyên.

var printer = (function () {

    var printerInstance;

    function create () {

    function print() {
        // underlying printer mechanics
    }

    function turnOn() {
        // warm up
        // check for paper
    }

    return {
        // public + private states and behaviors
        print: print,
        turnOn: turnOn
    };
    }

    return {
    getInstance: function() {
        if(!printerInstance) {
        printerInstance = create();
        }
        return printerInstance;
    }
    };

    function Singleton () {
    if(!printerInstance) {
        printerInstance = intialize();
    }
    };

})();

Phương thức create là riêng tư vì ta không muốn client truy cập vào nó, tuy nhiên, hãy lưu ý phương thức getInstance là công khai. Mỗi nhân viên viên chức có thể tạo một version máy in bằng cách tương tác với phương thức getInstance , như sau:

var officePrinter = printer.getInstance();

Trong AngularJS, Singleton là phổ biến, đáng chú ý nhất là dịch vụ, nhà máy và nhà cung cấp. Vì chúng duy trì trạng thái và cung cấp quyền truy cập tài nguyên, việc tạo hai version đánh bại quan điểm của một dịch vụ / nhà máy / nhà cung cấp được chia sẻ.

Điều kiện chạy đua xảy ra trong các ứng dụng đa stream khi nhiều stream cố gắng truy cập vào cùng một tài nguyên. Các singleton dễ bị ảnh hưởng bởi các điều kiện chủng tộc, chẳng hạn như nếu không có cá thể nào được khởi tạo trước, hai stream sau đó có thể tạo hai đối tượng thay vì trả về và cá thể. Điều này đánh bại mục đích của một singleton. Do đó, các nhà phát triển phải biết đồng bộ hóa khi triển khai các singleton trong các ứng dụng đa stream .


Tags:

Các tin trước

Mẫu thiết kế module trong JavaScript 2020-09-21
Mẫu thiết kế trình quan sát trong JavaScript 2020-09-21
Mẫu thiết kế nguyên mẫu trong JavaScript 2020-09-21
Lời hứa của JavaScript dành cho người giả 2020-09-15
Sao chép các đối tượng trong JavaScript 2020-09-15
Cách sử dụng API tìm nạp JavaScript để lấy dữ liệu 2020-09-15
Cách mã hóa và giải mã chuỗi với Base64 trong JavaScript 2020-09-15
Toán tử đơn nguyên JavaScript: Đơn giản và hữu ích 2020-09-15
Hiểu Hoisting trong JavaScript 2020-09-15
5 Mẹo để Viết Điều kiện Tốt hơn trong JavaScript 2020-09-15