Đơn php

Singleton là Design Pattern được thiết kế để hạn chế khởi tạo instance của Class về một đối tượng duy nhất. Tức là nó chỉ khởi động một lần và sử dụng lại cho toàn bộ hệ thống

ahihi đồ ngốc nghếch thanh hùng nè

ahihi đồ ngốc nghếch thanh hùng nè

anh hùng thông minh lắm

anh hùng ebudezain

Nói một cách đơn giản hơn thì instance của Singleton giống như một “đối tượng toàn cầu” vậy. Ví dụ bạn kết nối vào db thì bạn chỉ nên kết nối vào DB đúng 1 lần duy nhất thôi chứ đừng kết nối nhiều lần. Giả sử có 1 triệu câu truy vấn mà bạn kết nối vào đó 1 triệu lần thì DB bạn sẽ vui đến mức cười "xỉu"

tôi thích như vậy

anh hùng thông minh lắm

bài viết được viết bởi cường tráng hùng https. //ebudezain. com/

anh hùng ebudezain

Mẫu mã trong JavaScript

ahihi đồ ngốc nghếch thanh hùng nè

anh hùng thông minh lắm

tôi thích như vậy

tôi thích như vậy

anh hùng đẹp trai

tôi thích như vậy

Với php, java, hay C# các bạn đều có lớp để khai báo các biến private rồi tạo hàm createInstance để kiểm tra xem đã tồn tại trong biến tĩnh rồi thì return về, nếu không tồn tại thì tạo mới. Nhưng với js thì không chắc.  

anh hùng đẹp trai

tôi thích như vậy

bài viết được viết bởi cường tráng hùng https. //ebudezain. com/

tôi thích như vậy

read data support

With js thì đúng nghĩa là chúng ta chỉ có chức năng nên công việc khai báo sẽ như sau.  

ahihi đồ ngốc nghếch thanh hùng nè

tôi thích như vậy

const ObjectSingleton = (function () {
    let instance;
    function init() {
        let number = 0;
        return {
            setNumber: function (x) {
                number = x;
            },
            getNumber: function () {
                return number;
            }
        };
    }

    return {
        getInstance: function () {
            if (!instance) instance = init();
            return instance;
        }
    }
})();

const object1 = ObjectSingleton.getInstance(); // trả về nguyên cái object của hàm init trả về trong đó init có biến number và 2 hàm getter và setter
console.log("instance A: ", object1.getNumber()); // instance A: 0
object1.setNumber(10); // lúc này biến number đang là 10
console.log("instance A: ", object1.getNumber()); // instance A: 10

const object2 = ObjectSingleton.getInstance();
console.log("instance B: ", object2.getNumber()); // instance B: 10

console.log(object1 === object2);                   // true

read data support

anh hùng đẹp trai

read data support

giải thích bộ sưu tập. lúc đầu bạn chưa xài hàm getInstance thì instance đang không có gì là undefine nhưng khi bạn đã từng xài rồi mà còn gọi lại hàm getInstance thì nó sẽ return về cái instance ban đầu đã tồn tại rồi.  

bài viết được viết bởi cường tráng hùng https. //ebudezain. com/

anh hùng thông minh lắm

anh hùng đẹp trai

Trong js sida double when you are used class chứ không phải cugnx chắc chắn là bạn buộc buộc phải sử dụng hàm. Vì vậy nếu bạn đang sử dụng class thì bạn cũng có 1 cách viết khác khá hay về singleton như sau

Singleton là gì? . Vậy cấu trúc của Singleton ra sao và cách phát triển khai thác như thế nào, cùng mình tìm hiểu nội dung dưới đây

định nghĩa

Singleton là một mẫu thiết kế sáng tạo cho phép bạn đảm bảo rằng một lớp chỉ có một phiên bản, đồng thời cung cấp một điểm truy cập chung cho phiên bản này

Dịch. Singleton là 1 mẫu design pattern thuộc nhóm khởi tạo cho phép bạn chắc chắn rằng 1 Layer sẽ chỉ có 1 instance duy nhất và nó cung cấp 1 method cho instance này ở bất cứ đâu trong chương trình

Đơn php
Đơn php

Đơn php
Đơn php

Singleton giải quyết bài toán nào?

Singleton Pattern giải quyết 2 vấn đề dưới đây cùng 1 lúc

  • Đảm bảo rằng 1 lớp (class) sẽ chỉ có 1 trường hợp duy nhất. Sẽ có 1 số trường hợp mà bạn cần kiểm tra việc truy cập vào các tài nguyên được sử dụng chung ví dụ như cơ sở dữ liệu hoặc 1 tệp bất kỳ;

Cách hoạt động của nó sẽ như sau. Thử tưởng tượng rằng bạn đã tạo 1 đối tượng rồi, tuy nhiên sau đó bạn lại quyết định tạo thêm 1 đối tượng mới. Lúc này thay vì việc nhận được 1 đối tượng mới, bạn sẽ nhận về đối tượng mà bạn tạo ra lúc trước

Lưu ý rằng hành vi này không thể thực hiện được với 1 phương thức khởi tạo thông thường (như sử dụng mới), vì nó sẽ luôn trả về 1 đối tượng mới

Đơn php
Đơn php
Tại đây, khách hàng không thể không nhận ra rằng họ đang làm việc với cùng 1 đối tượng

  • Cung cấp 1 điểm truy cập toàn cầu cho trường hợp đó. Biến toàn cầu (toàn cục) thường được sử dụng để lưu trữ 1 số đối tượng thiết yếu. Mặc dù nó rất là tiện dụng, nhưng chúng tôi cũng rất không an toàn vì bất kỳ đoạn mã nào trong chương trình cũng có thể ghi đè nội dung của các biến đó khiến cho ứng dụng của chúng tôi bị sập. Singleton cũng giống như biến toàn cục, nó cho phép bạn truy cập đến 1 số đối tượng ở bất kỳ đâu trong chương trình, tuy nhiên nó cũng bảo vệ trường hợp đó tránh việc bị ghi đè bởi mã khác

Có 1 cách nhìn khác cho vấn đề này. bạn không muốn phần mã giải quyết vấn đề #1 ở trên bị phân tán khắp nơi trong chương trình, mã nguồn của mình. Sẽ tốt hơn khi chúng được viết hết trong 1 lớp, đặc biệt là nếu các phần mã khác phụ thuộc vào nó

Cách mạng Singleton khai thác

Tất cả các triển khai (implementations) của Singleton đều sẽ bao gồm 2 bước chung sau

  • Đặt phương thức khởi tạo mặc định (hàm tạo mặc định) là riêng tư để ngăn các đối tượng khác sử dụng toán tử mới cho lớp Singleton
  • Tạo 1 phương thức khởi tạo hoạt động tĩnh như 1 phương thức khởi tạo (hàm tạo), trong đó phương thức này sẽ gọi hàm khởi tạo riêng để tạo ra 1 đối tượng và lưu nó vào trường tĩnh (trường tĩnh). Tất cả các lệnh gọi sau phương thức này đều trả về các đối tượng được lưu trong bộ đệm

Nếu mã của bạn truy cập đến lớp Singleton, nó có thể gọi đến phương thức tĩnh của Singleton, và sẽ luôn được trả về chung 1 đối tượng

Ví dụ thực tế

Singleton có nhiều ví dụ thực tế

  • 1 đất nước chỉ có thể có 1 chính phủ chính thức. Dù kể ai, cá nhân nào làm việc cho chính phủ thì danh xưng “Chính phủ” vẫn là 1 khái niệm chỉ định chung dùng để chỉ nhóm những người phụ trách. Chính phủ ở đây được xem như 1 ví dụ về Singleton
  • Khi bạn muốn tăng giảm âm lượng của 1 chiếc điện thoại. Mặc dù có cuộc gọi từ phần mềm thứ 3, hay thao tác trực tiếp trên phần cứng; . Ta cũng xem lớp điều khiển âm lượng này là 1 singleton
  • Máy trong cũng có thể xem là 1 singleton khi nó nhận yêu cầu và xử lý từ mọi người trong hệ thống
Đơn php
Đơn php

Constructor, way development Singleton

Đơn php
Đơn php

Lớp Singleton báo phương thức tĩnh getInstance trả về cùng 1 phiên bản của nó

Phương thức khởi tạo Singleton nên được ẩn khỏi máy khách mã, cách duy nhất để lấy đối tượng Singleton được gọi là phương thức getInstance

Khai thác mã Singleton Pattern với TypeScript

/**
 * The Singleton class defines the `getInstance` method that lets clients access
 * the unique singleton instance.
 */
class Singleton {
    private static instance: Singleton;

    /**
     * The Singleton's constructor should always be private to prevent direct
     * construction calls with the `new` operator.
     */
    private constructor() { }

    /**
     * The static method that controls the access to the singleton instance.
     *
     * This implementation let you subclass the Singleton class while keeping
     * just one instance of each subclass around.
     */
    public static getInstance(): Singleton {
        if (!Singleton.instance) {
            Singleton.instance = new Singleton();
        }

        return Singleton.instance;
    }

    /**
     * Finally, any singleton should define some business logic, which can be
     * executed on its instance.
     */
    public someBusinessLogic() {
        // ...
    }
}

/**
 * The client code.
 */
function clientCode() {
    const s1 = Singleton.getInstance();
    const s2 = Singleton.getInstance();

    if (s1 === s2) {
        console.log('Singleton works, both variables contain the same instance.');
    } else {
        console.log('Singleton failed, variables contain different instances.');
    }
}

clientCode();

Nội dung trên đã có phần nào giải đáp thắc mắc Singleton là gì cũng như những ứng dụng thực tế của Singleton. Nếu bạn muốn đóng góp thì đừng phản hồi lại với TopDev nhé. Chúc bạn code mau lên trình