Trong hầu hết các lớp ngôn ngữ lập trình, có rất nhiều loại hệ thống. Trong khi một lớp, với các phương thức tĩnh và các biến của nó là một đối tượng, nó thường không thể thực hiện một giao diện hoặc mở rộng các lớp khác. Vì lý do đó, nó không thể được sử dụng theo cách đa hình, vì nó không thể là kiểu con của kiểu khác. Ví dụ, nếu bạn có một giao diện IFooable
, được yêu cầu bởi một số chữ ký phương thức của các lớp khác, đối tượng lớp StaticFoo
không thể được sử dụng thay cho IFooable
, trong khi FooSingleton.getInstance()
có thể (giả sử, FooSingleton
thực hiện IFooable
).
Xin lưu ý rằng, như tôi đã nhận xét về câu trả lời của Heinzi, một singleton là một mẫu để kiểm soát sự kiện. Nó thay thế new Class()
bằng Class.getInstance()
, cho phép tác giả kiểm soát nhiều hơn các trường hợp mà ông có thể sử dụng để ngăn chặn việc tạo các trường hợp không cần thiết. Singleton chỉ là một trường hợp rất đặc biệt của mẫu nhà máy và cần được xử lý như vậy. Việc sử dụng phổ biến làm cho nó trở thành trường hợp đặc biệt của các đăng ký toàn cầu, thường kết thúc là xấu, bởi vì các đăng ký toàn cầu không nên được sử dụng một cách đơn giản.
Nếu bạn có kế hoạch cung cấp các hàm trợ giúp toàn cầu, thì các phương thức tĩnh sẽ hoạt động tốt. Lớp sẽ không hoạt động như lớp, mà đúng hơn là một vùng tên. Tôi đề nghị, bạn duy trì sự gắn kết cao, hoặc bạn có thể kết thúc với các vấn đề ghép nối kỳ lạ nhất.
Greetz
back2dos
có thể trùng lặp của http://stackoverflow.com/questions/720744/static-class-and-singleton –
Đừng nghĩ vì chúng ta nói về 2 ngôn ngữ khác nhau nên câu trả lời có thể thay đổi, nhưng cảm ơn vì liên kết, trong java không bao giờ nghe thuật ngữ "monostate" –