1. Single Pattern là gì?
Theo Gang of Four patterns một cuốn sách rất nổi tiếng về design pattern thì Single Pattern là một design pattern trong số 5 design pattern thuộc nhóm Creational Design Pattern
Single Pattern là một design pattern mà
- Singleton Pattern là gì?
- Tại sao cần dùng Singleton Pattern
- Làm thế nào để implement Singleton Pattern
- Có những cách nào để implement Singleton Pattern Liệu có đủ không nhỉ các bạn cùng theo dõi nhé
Vậy tại sao cần phải sử dụng Single Pattern
2. Tại sao cần dùng Singleton Pattern?
Hầu hết các đối tượng trong một ứng dụng đều chịu trách nhiệm cho công việc của chúng và truy xuất dữ liệu tự lưu trữ (self-contained data) và các tham chiếu trong phạm vi được đưa ra của chúng. Tuy nhiên, có nhiều đối tượng có thêm những nhiệm vụ và có ảnh hưởng rộng hơn, chẳng hạn như quản lý các nguồn tài nguyên bị giới hạn hoặc theo dõi toàn bộ trạng thái của hệ thống. Ví dụ có thể có rất nhiều máy in trong hệ thống nhưng chỉ có thể tồn tại duy nhất một Sprinter Spooler (Phần quản lý máy in)

Hay
giả sử trong ứng dụng có chức năng bật tắt nhạc nền chẳng hạn, khi người dùng mở app thì ứng dụng sẽ tự động mở nhạc nền và nếu người dùng muốn tắt thì phải vào setting trong app để tắt nó, trong setting của app cho phép người dùng quản lí việc mở hay tắt nhạc, và trong trường hợp này bạn sẽ cần sử dụng singleton để quản lí việc này. Chắc chắn bạn phải cần duy nhất 1 instance để có thể ra lệnh bật hay tắt, tại sao ? vì đơn giản bạn không thể tạo 1 instance để mở nhạc rồi sau đó lại tạo 1 instance khác để tắt nhạc, lúc này sẽ có 2 instance được tạo ra, 2 instance này không liên quan đến nhau nên không thể thực hiện thực hiện việc cho nhau được, bạn phải hiểu rằng instance nào bật thì chỉ có instance đó mới được phép tắt nên dẫn đến phải cần 1 instance.
Ví dụ
// Singleton Pattern
function Process(state) {
this.state = state;
}
//IIFE (function(){}()) // bảo mật
const SingletonPattern = (function () {
class ProcessManager {
numberProcess = 0;
incrProcess() {
this.numberProcess += 1;
}
}
let storeManager;
function CreateManager() {
storeManager = new ProcessManager();
return storeManager;
}
// public methods cho người dùng share tài nguyên
return {
initStoreManager() {
if (!storeManager) {
storeManager = CreateManager();
}
return {
show() {
return storeManager;
},
incre() {
storeManager?.incrProcess();
},
getNumberProcess() {
return storeManager?.numberProcess;
},
};
},
};
})();
const Singleton1 = SingletonPattern.initStoreManager();
const Singleton2 = SingletonPattern.initStoreManager();
console.log(Singleton1 === Singleton2); // false
Singleton1.incre();
Singleton1.incre();
Singleton1.incre();
Singleton1.incre();
console.log(Singleton1.getNumberProcess()); // 4
console.log(Singleton2.getNumberProcess());// 4
Singleton2.incre();
Singleton2.incre();
Singleton2.incre();
Singleton2.incre();
console.log(Singleton1.getNumberProcess()); //8
console.log(Singleton2.getNumberProcess()); // 8
Tổng kết
Có rất nhiều cách implement cho Singleton, Để hiểu rõ hơn bạn tìm hiểu thêm Closure trong lập trình javascript nhé.




