Vui lòng xem xét lại. Bạn KHÔNG muốn sử dụng singletons ở đây. Bạn đang thực hiện một số chức năng có sẵn cho người dùng có được từ lớp học của bạn. Đó là tốt. Nhưng bạn cũng chỉ ra một cách cụ thể trong đó nó phải luôn luôn được sử dụng, và hoàn toàn không có lý do. Điều đó không tốt. Có thể có ý nghĩa khi chỉ khởi tạo một đối tượng của lớp này trong phần lớn thời gian, nhưng trong trường hợp đó, chỉ đơn giản là khởi tạo đối tượng sau khi. Nó không giống như bạn đang rất có khả năng vô tình nhanh chóng một chục đối tượng mà không nhận thấy. Hơn nữa, làm cách nào để bạn biết rằng có hai trường hợp sẽ KHÔNG BAO GIỜ có hữu ích không? Tôi có thể nghĩ đến nhiều trường hợp ngay cả bây giờ.
Thử nghiệm đơn vị: Bạn có thể muốn mỗi thử nghiệm để khởi tạo đối tượng này và xé nó lại sau đó. Và vì hầu hết mọi người có nhiều hơn một bài kiểm tra đơn vị, bạn sẽ cần phải thực hiện nó nhiều lần.
Hoặc bạn có thể tại một số điểm quyết định có nhiều cấp độ giống nhau/giống nhau trong trò chơi của bạn, điều đó có nghĩa là tạo nhiều phiên bản.
Một singleton cung cấp cho bạn hai điều:
- Một sự đảm bảo rằng không có nhiều hơn một thể hiện của đối tượng sẽ không bao giờ được khởi tạo, và
- truy cập toàn cầu để dụ
rằng Nếu bạn không cần cả hai thứ này, có những lựa chọn thay thế tốt hơn. Bạn chắc chắn không cần truy cập toàn cầu. (globals là xấu, và thường là một triệu chứng của thiết kế xấu, đặc biệt là trong dữ liệu có thể thay đổi như trạng thái trò chơi của bạn)
Nhưng bạn không cần đảm bảo rằng sẽ không có nhiều hơn một trường hợp. Đó có phải là kết thúc của thế giới nếu tôi khởi tạo đối tượng hai lần không? Ứng dụng có bị lỗi không? Nếu vậy, bạn cần đảm bảo đó. Nhưng trong trường hợp của bạn, không có gì xấu sẽ xảy ra. Người instantiating đối tượng chỉ đơn giản là sử dụng bộ nhớ nhiều hơn cần thiết. Nhưng anh ta có thể có lý do.
Đơn giản chỉ cần đặt trong tài liệu lớp học rằng đây là một lớp học rất lớn và tốn kém, và bạn không nên nhanh chóng nó thường xuyên hơn cần thiết. Đã giải quyết được sự cố. Bạn không loại bỏ tính linh hoạt có thể trở nên hữu ích sau này, bạn không cấp quyền truy cập toàn cầu vào dữ liệu mà không có lý do gì. Bởi vì bạn có thể kiểm soát ai có thể nhìn thấy đối tượng, bạn không cần phải nhấn chìm nó trong ổ khóa sẽ trở thành một nút cổ chai trong các ứng dụng đa luồng. Bạn không có phụ thuộc ẩn nằm rải rác trong toàn bộ mã của bạn, khiến bạn khó kiểm tra và khó sử dụng lại hơn.
Tôi đã ở trên hàng rào liên quan đến người độc thân trong một thời gian. Nhưng chủ đề này làm cho một số điểm tốt để không sử dụng chúng: http://stackoverflow.com/questions/137975/what-is-so-bad-about-singletons – JMD
Có hàng trăm chủ đề, bài đăng blog và bài viết đầy đủ các lý do để sử dụng singletons. Nó là cực kỳ hiếm hoi mà họ thực sự cải thiện mã của bạn. Vui lòng suy nghĩ lại điều này. Bạn, và tất cả các nhà phát triển khác làm việc với mã đó, sẽ hối hận về việc trát vữa ở khắp mọi nơi. – jalf