Có phải là thực hành / thiết kế mã hóa xấu để tạo ra một lớp sẽ chỉ được khởi tạo một lần?
Không, ngay cả khi chỉ khởi tạo một lần, bạn cần một lớp cho nó. Nhưng đừng cho rằng bạn sẽ luôn chỉ cần một ví dụ, bây giờ và trong tương lai.
Giả sử bạn tạo một trò chơi và bạn có một lớp người chơi:
class Player {
...
}
Bạn sẽ khởi tạo một lớp người chơi trong trò chơi của mình và luôn sử dụng cùng một đối tượng. Không có gì sai với nó.
Tuy nhiên, đừng tạo ra một Singleton từ nó! Hôm nay bạn thiết kế trò chơi của mình và nghĩ rằng "Chà, nó sẽ luôn là trò chơi một người chơi. Tôi sẽ sử dụng Singleton cho Người chơi của tôi". Nhưng trong phiên bản 2, bạn có thể muốn triển khai nhiều người chơi - và sau đó bạn đang gặp rắc rối. Bạn sẽ phải viết lại và điều chỉnh rất nhiều mã, vì thiết kế của bạn không hỗ trợ khởi tạo nhiều người chơi.
Điều tương tự là với cache. Hoặc logger. Hoặc giao diện mạng. Hôm nay, bạn nghĩ rằng bạn sẽ chỉ cần một, luôn luôn, chắc chắn. Nhưng trong phiên bản tương lai, bạn cần thêm một giây. Hãy nhận biết tình huống này.