Design pattern trong PHP – Singleton Pattern

Singleton Design Pattern

Singleton là 1 trong 5 design pattern thuộc nhóm Creational Design Pattern – nhóm hỗ trợ khởi tạo class.

Mục đích của Singleton là đảm bảo chỉ duy nhất 1 instance của class được khởi tạo và có thể truy cập từ mọi nơi đến instance đó.

Kiến trúc

  • Đặt constructor là private để client không thể khởi tạo object.
  • Tạo 1 biến static private là instance của class đó để đảm bảo nó là duy nhất và chỉ được tạo ra trong class đó thôi.
  • Tạo 1 public static method trả về instance vừa khởi tạo trên. Đây là cách duy nhất để có thể truy cập vào instance này.

Singleton được sử dụng khi:

  • Lớp đó chỉ cần duy nhất 1 instance.
  • Có thể truy cập instance đó từ mọi nơi.
  • Dùng giải quyết các bài toán cần truy cập vào ứng dụng như: Shared resources, Log, Configuration …
  • Một số design pattern khác cũng sử dụng Singleton như: Abstract Factory, Builder, Prototype, Facade …

Ví dụ:

Lớp Database là Singleton:

class Database
{
    private $table_name;
    private static $instance;
    
    private function __construct($table_name) {
        $this->table_name = $table_name;
        // do somethings
    }
    
    public function editRecord() {
        // edit record
        echo 'Edit record of table ' . $this->table_name;
    }
    
    public static function getInstance($table_name) {
        // kiểm tra đối tượng nếu chưa được khởi tạo thì khởi tạo nó
        if (static::$instance == null) {
            static::$instance = new Database($table_name);
        }
        
        return static::$instance;
    }
}

// gọi singleton
$database = Database::getInstance('products');
$database->editRecord();

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *