Theo cách giải thích cứng nhắc về Thiết kế hướng đối tượng, một lớp tiện ích là điều cần tránh.
Vấn đề là nếu bạn làm theo một diễn giải cứng nhắc thì bạn sẽ cần phải buộc lớp của bạn thành một số đối tượng sắp xếp để hoàn thành nhiều thứ.
Ngay cả các nhà thiết kế Java làm cho lớp tiện ích (java.lang.Math nói đến cái tâm)
lựa chọn của bạn là:
double distance = Math.sqrt(x*x + y*y); //using static utility class
vs:
RootCalculator mySquareRooter = new SquareRootCalculator();
mySquareRooter.setValueToRoot(x*x + y*y);
double distance;
try{
distance = mySquareRooter.getRoot();
}
catch InvalidParameterException ......yadda yadda yadda.
Thậm chí nếu chúng ta tránh phương pháp tiết, chúng tôi vẫn có thể kết thúc với:
Mathemetician myMathD00d = new Mathemetician()
double distance = myMathD00d.sqrt(...);
trong trường hợp này, .sqrt() vẫn còn tĩnh, vậy thì điểm nào sẽ là tạo đối tượng ở vị trí đầu tiên?
Câu trả lời là, tạo các lớp tiện ích khi tùy chọn khác của bạn sẽ tạo ra một loại lớp nhân viên "công nhân" không có hoặc ít sử dụng cho các biến mẫu.
Nguồn
2009-12-21 22:13:30
'java.lang .Math' là phương thức tĩnh 100% với hàm tạo 'private' (không thể được khởi tạo). – Asaph
Không chắc liệu câu hỏi này đã được hỏi trong diễn đàn này chưa. Nhưng nó là một thực hành xấu cho một lớp học để chỉ có các trường tĩnh? Tôi đã thấy rất nhiều lớp học như vậy và theo ý kiến của tôi, họ không phù hợp với OOP. – ka3ak
@ ka3ak Các lớp chỉ có các trường tĩnh được giải quyết một phần trong một vài câu trả lời cho câu hỏi này. –