Design Patterns - Singleton pattern đảm bảo rằng một lớp chỉ có một thể hiện (instance) duy nhất. Do thể hiện này có tiềm năng sử dụng trong suốt chương trình, nên mẫu thiết kế Singleton cũng cung cấp một điểm truy cập toàn cục đến nó.
Mẫu thiết kế Singleton đơn giản và dễ áp dụng, chỉ cần bổ sung vài dòng lệnh trong lớp muốn chuyển thành Singleton.
Dữ liệu thành viên instance (private và static) là đối tượng duy nhất của lớp Singleton.
Constructor của lớp Singleton được định nghĩa thành protected hoặc private để người dùng không thể tạo thực thể trực tiếp từ bên ngoài lớp.
Phương thức getInstance() dùng để khởi tạo đối tượng duy nhất, định nghĩa thành public và static. Client chỉ dùng getInstance() để tạo đối tượng cho lớp Singleton.
Trong chế độ multithreading, mẫu thiết kế Singleton có thể làm việc không tốt: do getInstance() không an toàn thread, hai thread có thể gọi phương thức sinh đối tượng cùng một thời điểm và hai thể hiện sẽ được tạo ra. Nếu đồng bộ (synchronized) phương thức getInstance() để an toàn thread sẽ dẫn đến giảm hiệu suất chương trình.
package com.excample.designpattern.singleton;
class Singleton {
private static Singleton instance;
private Singleton() {
}
public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
public class ClassSingleton {
public static void main(String[] args) {
System.out.println("--- Singleton Pattern ---");
Singleton single1 = Singleton.getInstance();
Singleton single2 = Singleton.getInstance();
if (single1.equals(single2)) {
System.out.println("Unique Instance");
}
}
}
Abstract Factory: thường là Singleton để trả về các đối tượng factory duy nhất.
Builder: dùng để xây dựng một đối tượng phức tạp, trong đó Singleton được dùng để tạo một đối tượng truy cập tổng quát (Director).
Unpublished comment
Viết câu trả lời