Tìm hiểu Singleton Pattern

0
37
Rate this post

Hãy tưởng tượng rằng bạn đang phát triển một hệ thống và gặp phải vấn đề hiệu năng, do đồng thời sử dụng quá nhiều đối tượng và tiêu tốn quá nhiều tài nguyên. Đây là một thách thức mà bạn cần giải quyết, và Singleton pattern có thể giúp bạn thực hiện điều đó.

Giới thiệu về Singleton Pattern

Singleton Pattern là một mẫu thiết kế được sử dụng để đảm bảo rằng mỗi lớp chỉ có một thể hiện duy nhất và mọi tương tác đều thông qua thể hiện này. Nó cung cấp một phương thức khởi tạo private và duy trì một thuộc tính tĩnh để tham chiếu đến thể hiện duy nhất của lớp Singleton.

Bài toán thực tế

Để minh họa cách Singleton pattern hoạt động, hãy tưởng tượng rằng bạn đang phát triển một ứng dụng quản lý cơ sở dữ liệu. Trong mã nguồn, bạn tạo hàng trăm đối tượng Database và rắc rối là mỗi đối tượng này rất lớn. Điều gì là giải pháp? Singleton pattern là câu trả lời.

Mẫu Singleton đảm bảo rằng bạn chỉ khởi tạo một đối tượng duy nhất cho một lớp. Nếu bạn không sử dụng mẫu thiết kế này, mỗi lần sử dụng toán tử new, một đối tượng mới sẽ được tạo ra.

Triển khai Singleton Pattern

Để bắt đầu triển khai Singleton pattern và giải quyết vấn đề hiệu năng, hãy tạo một lớp Database như sau:

class Database {
    private static $instance;
    private $name;
    private $record;

    private function __construct($name) {
        $this->name = $name;
        $this->record = 0;
    }

    public static function getInstance($name) {
        if (self::$instance == null) {
            self::$instance = new Database($name);
        }
        return self::$instance;
    }

    public function getName() {
        return $this->name;
    }

    public function editRecord($operation) {
        return "Performing a " . $operation . " operation on record " . $this->record . " in database " . $this->name;
    }
}

Với cách triển khai này, bạn không thể gọi hàm khởi tạo (constructor) của lớp Database trực tiếp bằng toán tử new. Thay vào đó, bạn sẽ sử dụng phương thức getInstance() để tạo đối tượng:

$database = Database::getInstance("Product");
echo "This is the " . $database->getName() . " database.";

Với cách làm này, dù bạn gọi phương thức getInstance() bao nhiêu lần, bạn luôn nhận được cùng một đối tượng. Đó chính là cách bạn sử dụng Singleton pattern.

Tóm tắt

Trong bài viết này, chúng ta đã tìm hiểu về Singleton Pattern – một mẫu thiết kế rất hữu ích để quản lý tài nguyên hiệu quả. Bằng cách sử dụng Singleton pattern, bạn có thể đảm bảo rằng chỉ có một đối tượng tồn tại cho một lớp cụ thể và tiết kiệm tài nguyên. Hy vọng bài viết sẽ giúp ích cho bạn trong quá trình lập trình.


Edited by dnulib.edu.vn
Find more interesting articles at Dnulib.