Singleton trong java - Áp dụng với Game Setting

03 tháng 09, 2024 - 725 lượt xem

What (Định nghĩa)
Singleton là một mẫu thiết kế (design pattern) trong lập trình, đảm bảo rằng một lớp chỉ có một thể hiện duy nhất và cung cấp một điểm truy cập toàn cục đến thể hiện đó. Mẫu này thường được sử dụng để quản lý tài nguyên chung, như kết nối cơ sở dữ liệu hoặc cấu hình ứng dụng.

When (Khi nào sử dụng)
Khi bạn cần đảm bảo rằng chỉ có một thể hiện duy nhất của một lớp.
Khi việc tạo nhiều thể hiện có thể gây ra vấn đề về hiệu suất hoặc tài nguyên.
Khi bạn cần một điểm truy cập toàn cục cho một tài nguyên cụ thể.

Why (Tại sao sử dụng)
Giảm thiểu việc tạo ra nhiều thể hiện không cần thiết, tiết kiệm bộ nhớ.
Cung cấp một cách dễ dàng để quản lý trạng thái toàn cục.
Đảm bảo rằng tất cả các phần của ứng dụng đều sử dụng cùng một thể hiện, giúp duy trì tính nhất quán.

How (Cách triển khai)
Có nhiều cách để triển khai mẫu Singleton trong Java. Dưới đây là một cách phổ biến và an toàn với đa luồng:
Note: Cần tìm hiểu thêm về synchronized

public class Singleton {
    // Biến tĩnh để lưu trữ thể hiện duy nhất
    private static Singleton instance;

    // Constructor riêng tư để ngăn chặn việc tạo thể hiện mới
    private Singleton() {
    }

    // Phương thức để lấy thể hiện duy nhất
    public static synchronized Singleton getInstance() {
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }
}

Ví dụ thực tế:

public class GameSettings {
    private static GameSettings instance;
    private int volume;
    private int brightness;

    private GameSettings() {
        // Khởi tạo các giá trị mặc định
        volume = 50;
        brightness = 75;
    }

    public static synchronized GameSettings getInstance() {
        if (instance == null) {
            instance = new GameSettings();
        }
        return instance;
    }

    public int getVolume() {
        return volume;
    }

    public void setVolume(int volume) {
        this.volume = volume;
    }

    public int getBrightness() {
        return brightness;
    }

    public void setBrightness(int brightness) {
        this.brightness = brightness;
    }
}

// Sử dụng
public class Main {
    public static void main(String[] args) {
        GameSettings settings = GameSettings.getInstance();
        settings.setVolume(80);
        System.out.println("Volume: " + settings.getVolume());
        settings.setBrightness(90);
        System.out.println("Brightness: " + settings.getBrightness());
    }
}

Bình luận

avatar
Lê Trung Dũng 2024-09-03 21:46:08.451097 +0000 UTC

Hay ạ

Avatar
* Vui lòng trước khi bình luận.
Ảnh đại diện
  +2 Thích
+2