Singleton Design Pattern

Hi. Chào các bạn. Đây là chủ đề design pattern.

Một mẫu pattern tiếp theo trong nhóm creation pattern: Singleton Design Pattern.

Đây là một trong những mẫu được sử dụng rất phổ biến và rộng rãi trong các dự án lập trình.

1. Bài toán dẫn dắt cho Singleton Pattern.

Giả sử vẫn với bài toán cửa hàng bán đồ điện tử.

Khi cần xây dựng các đối tượng sản phẩm cho các cửa hàng, chúng ta đã có các mẫu pattern trước đó.

Nhưng sang một khía cạnh khác: Đối với cửa hàng ngoài việc bán sản phẩm, thì còn có:

+ Các thông tin về khuyến mãi.

+ Thông tin về giá,

+ Thông tin về các hình thức mua bán, dịch vụ.

Ta gọi chung là: Thông tin dịch vụ.

Và nếu cửa hàng mở rộng với nhiều chi nhánh ở các địa điểm khác nhau.

Thì thông tin dịch vụ là chung và nhất quán cho mọi chi nhánh.

Từ đó suy ra, các shop con không cần khai báo các thông tin dịch vụ cho riêng mình, mà chỉ cần lấy từ shop mẹ.

Áp dụng vào bài toán lập trình.

Khi bạn xây dựng một lớp quản lý cho cửa hàng.

Bạn sẽ tạo một đối tượng và thiết lập : Thông tin dịch vụ như ở trên.

Nhưng bạn sẽ gặp vấn đề và đưa ra thắc mắc đó là.

Giả sử tại một hàm của một lớp đối tượng khác không liên quan đến đối tượng cửa hàng ở trên,

tôi muốn lấy các thông tin của cửa hàng ở trên. Vậy thì tôi sẽ làm thế nào.

– Nếu tôi khai báo đối tượng mới, thì đối tượng mới đó không có dữ liệu cho thông tin dịch vụ.

– Không thể khái báo đối tượng mới rồi, thiết lập mới các thông tin rồi lại lấy ra….(vì nếu có thông tin để thiết lập, thì cần gì thiết lập và lấy ra).

=> Chúng ta cần có một đối tượng tĩnh của lớp cửa hàng, thiết lập các thông tin một lần duy nhất.

Rồi sau đó ở bất kỳ vị trí nào chúng ta cũng đều có thể sử dụng duy nhất đối tượng tĩnh đó để lấy các thông tin.

Đó là cơ chế của Singleton Pattern.

2. UML Cho Singleton.

 

3. Code C++ triển khai singleton design pattern
//Phattrienphanmem123az
#include <iostream>
#include <conio.h>

using namespace std;

class ShopRule
{
private:
  static ShopRule* instance_;
  int form_;
  ShopRule() : form_(1){}

public:
  static ShopRule* getInstace() 
  {
    if(instance_ == NULL) 
      instance_ = new ShopRule();
    return instance_;
  }

  void setform(int fr) {form_ = fr;}
  int getform() {return form_;}

  void showRule() 
  {
    std::cout << "Form: " << form_ << endl;
  }
};


ShopRule* ShopRule::instance_ = NULL;

int main() 
{
  ShopRule *rule_shop = ShopRule::getInstace();
  rule_shop->setform(100);
  rule_shop->showRule();

  _getch();
  return 0;
}

Ok. singleton được áp dụng khá nhiều trong các dự án lập trình, đặc biệt là kỹ thuật setting các chức năng cho một phần mềm.

 

 

 

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.