Chào bạn @duy_nguyen_duc1,
Singleton là một design pattern hay được dùng khi bạn muốn hạn chế việc khởi tạo object từ một class. Ví dụ như bạn muốn hạn chế toàn ứng dụng chỉ có một object được ghi file, một object được ghi log hay chỉ có một database connection pool chẳng hạn.
Giả sử mình có chương trình tên là Foo
và cần một FooManager
để quản lý toàn cục các thứ mình có trong app. Mã giả mình sẽ viết như sau.
class FooManager {
// khởi tạo một đối tượng instance là biến static của class.
// chú ý là tùy mỗi ngôn ngữ sẽ có cách khởi tạo khác nhau.
static FooManger instance = new FooManager();
// hàm khởi tạo của class
function FooManager() {
this.logger = this.initLogger();
this.connectionPool = this.initConnectionPool();
}
public function logInfo(String message) {
this.logger.info(message);
}
public function getConnection() {
this.connectionPool.getConnection();
}
}
// Sử dụng
connection = FooManager.getConnection();
FooManager.logInfo("Got connection from pool");
Áp dụng vào bài tập của bạn, mình đoán lý do mà người ra đề muốn bạn dùng Singleton là vì cả ứng dụng của bạn chỉ có một ScreenManager
.
Tất nhiên mình (và chắc không có ai ở đây) sẽ không làm bài tập cho bạn cả mà sẽ hướng dẫn cách giải.
Nếu mình hiểu đúng đề, mình sẽ gợi ý cho bạn là ScreenManager class sẽ có state là một array các objects, và có các behaviors như đã được gợi ý.
Khi sử dụng Singleton pattern bạn cũng nên tìm hiểu trên mạng đọc thêm về lợi/hại của nó nữa. Sau khi đọc thêm bạn có thể viết lại ở thread này để giúp các bạn đi sau cũng có thể đọc được.