Singleton Class: Singleton Class là lớp trong đó chỉ có một cá thể duy nhất có thể tồn tại trên mỗi trình nạp lớp.
Lớp trợ giúp/tĩnh (Loại chỉ với các trường/phương thức tĩnh): Không có trường hợp nào của lớp này tồn tại. Chỉ các trường và phương thức có thể được truy cập trực tiếp dưới dạng hằng số hoặc phương thức trợ giúp.
Sau đây được tham chiếu từ điều này blog "Static classes in Java" mô tả nó độc đáo. Blog cũng có các ví dụ để giải thích giống nhau:
Singleton dụ:
public class ClassicSingleton {
private static ClassicSingleton instance = null;
private ClassicSingleton() {
// Exists only to defeat instantiation.
}
public static ClassicSingleton getInstance() {
if (instance == null) {
instance = new ClassicSingleton();
}
return instance;
}
}
tĩnh Lớp dụ:
/**
* A helper class with useful static utility functions.
*/
public final class ActionHelper {
/**
* private constructor to stop people instantiating it.
*/
private ActionHelper() {
// this is never run
}
/**
* prints hello world and then the users name
*
* @param users
* name
*/
public static void printHelloWorld(final String name) {
System.out.println("Hello World its " + name);
}
}
Vì vậy, sự khác biệt giữa hai ví dụ là gì và tại sao tôi nghĩ rằng giải pháp thứ hai là tốt hơn cho một lớp học bạn không muốn hoặc cần phải nhanh chóng. Thứ nhất, mẫu Singleton rất hữu ích nếu bạn muốn tạo một thể hiện của một lớp. Đối với lớp trợ giúp của tôi, chúng tôi không thực sự muốn tạo ra bất kỳ bản sao nào của lớp. Lý do tại sao bạn không nên sử dụng một lớp Singleton là bởi vì đối với lớp helper này, chúng tôi không sử dụng bất kỳ biến nào. Lớp singleton sẽ hữu ích nếu nó chứa một tập các biến mà chúng ta chỉ muốn một bộ và các phương thức sử dụng các biến đó nhưng trong lớp trợ giúp của chúng ta, chúng ta không sử dụng bất kỳ biến nào ngoài các biến được truyền vào. . Vì lý do này, tôi không tin rằng chúng tôi muốn có một Instleton Instance bởi vì chúng tôi không muốn có bất kỳ biến nào và chúng tôi không muốn bất cứ ai tranh luận về lớp học này. Vì vậy, nếu bạn không muốn bất cứ ai instantiating lớp, đó là bình thường nếu bạn có một số loại helper/utils lớp sau đó tôi sử dụng những gì tôi gọi là lớp tĩnh, một lớp học với một constructor tư nhân và chỉ bao gồm các phương pháp tĩnh mà không có bất kỳ bất kỳ biến nào.
Cùng câu trả lời cũng được tham chiếu từ câu trả lời của tôi here
Âm thanh giống như một bản sao của http://stackoverflow.com/questions/519520/difference-between-static-class-and-singleton-pattern – oksayt
Đừng quên đánh dấu câu trả lời là được chấp nhận nếu bạn có thông tin mình muốn .. –
kiểm tra http://stackoverflow.com/a/37114702/1406510 – nanosoft