Design Patterns: Singleton & Factory
Quảng cáo • Advertisement
📢 Sponsor Ad
Google AdSense
lesson.content.title
lesson.content.subtitle
🎯 Design Patterns: Bí kíp võ công thất truyền
Design Patterns không phải là code, nó là "giải pháp mẫu" cho các vấn đề muôn thuở. Tại sao phải tự nghĩ cách xây nhà trong khi có bản thiết kế chuẩn của kiến trúc sư thế giới?
1. Singleton (Độc cô cầu bại)
Vấn đề: Cả chương trình chỉ được phép có DUY NHẤT 1 kết nối đến Database. Nếu new 2 cái -> Xung đột -> Chết Deadlock.
Giải pháp: Pattern Singleton đảm bảo class đó chỉ được khởi tạo 1 lần duy nhất trong đời.
class Database {
private static instance; // Biến tĩnh lưu hàng độc
// Private Constructor: Cấm người ngoài tự new
private constructor() {}
public static getInstance() {
if (!instance) instance = new Database();
return instance;
}
}
// Dùng:
db = Database.getInstance(); // Luôn luôn trả về cùng 1 cái
🔥 Interview Q&A
Q: Singleton có Thread-safe không?
A: Code trên chưa an toàn. Nếu 2 luồng cùng gọi getInstance() lúc chưa có instance, nó sẽ tạo ra 2 instance! Cần dùng synchronized hoặc Double Check Locking để khóa lại.
2. Factory (Nhà máy sản xuất)
Vấn đề: Code của bạn đầy rẫy if-else để tạo object:
if (type == 'Cho') return new Cho(); else if (type == 'Meo') return new Meo(); ...
Sau này thêm con Gà, con Vịt lại phải đi sửa code khắp nơi?
Giải pháp: Dồn hết việc tạo object vào một class "Nhà máy" (Factory). Khi cần sửa, chỉ vào nhà máy sửa 1 chỗ là xong.
3. Observer (Kẻ rình mò) - Pub/Sub
Vấn đề: Khi Youtuber ra video mới, làm sao 1 triệu Subscriber nhận được thông báo?
Giải pháp: Youtuber (Subject) nắm trong tay danh sách email của fan. Khi có video, bấm nút "Notify" -> Lặp qua danh sách và gửi tin.
Đây là cơ chế hoạt động của sự kiện click chuột (Event Listener), Notification, Chat Realtime.
Quảng cáo • Advertisement
📢 Ad Space
Google AdSense