2009-02-27 34 views

Trả lời

9

phương pháp tĩnh sẽ là hiệu suất rất tốt hơn một chút và bộ nhớ khôn ngoan:

  1. Tránh (tiềm năng) hất của các cuộc gọi chức năng ảo.
  2. Loại bỏ bộ nhớ cần thiết cho một phiên bản thực tế của lớp học.
  3. Loại bỏ sự cần thiết phải có được một thể hiện của lớp khi bạn sử dụng nó.

Nhưng thành thật mà nói, tôi có thể vẫn làm cho nó là singleton. Những lợi ích bạn nhận được bằng cách không làm điều đó có thể quá nhỏ đến nỗi họ sẽ tạo ra sự khác biệt bằng không, ngay cả trong môi trường di động.

6

Bạn có thể tránh tình huống và biến chúng thành các lớp học thông thường không?

Bỏ qua câu hỏi về hiệu suất, tôi khuyên bạn nên tránh các singelton và phương pháp tĩnh để cải thiện khả năng kiểm tra của bạn.

Các phương pháp đơn và tĩnh có thể rất khó kiểm tra; Về vấn đề này singletons về cơ bản là phương pháp tĩnh nhưng với một tên khác. Misko Hevery, người làm việc trên Google Test team, có một vài điều tốt về chủ đề này:

2

Lấy câu hỏi của bạn tại mệnh giá, gọi điện tĩnh có thể sẽ yêu cầu số tiền ít nhất của cpu điện. Lý do là các phương thức thông thường là ràng buộc động và đòi hỏi một số tra cứu tại thời gian chạy trong khi các phương thức tĩnh bị ràng buộc một thời gian biên dịch.

Có nói rằng, nó có thể không quan trọng trong ứng dụng của bạn. Sự khác biệt thực sự là nhỏ. Nếu ứng dụng của bạn làm bất kỳ điều gì với gui, kết xuất xml, kết nối internet hoặc thao tác bên ngoài khác, bạn sẽ thấy rằng các hoạt động này lùn tra cứu toán học đơn giản bằng một yếu tố rất lớn.

Thậm chí nếu bạn không, trong quá trình lược tả bạn có nhiều khả năng gặp phải một nút cổ chai giữ ứng dụng của bạn và khám phá nó không phải là tra cứu phương pháp, nhưng một số logic bạn đã tự của bạn. Ví dụ, bạn đã sử dụng một arraylist thay vì một hashset và phương thức contains có vẻ tốn kém.

Vì vậy, hiệu suất trong những trường hợp này không thực sự quan trọng, tôi khuyên bạn nên sử dụng triển khai thực hiện trên các phương thức tĩnh vì thiết kế hơi linh hoạt hơn. Mặc dù bên ngoài các lựa chọn bạn cung cấp, tôi sẽ bỏ hoàn toàn các lớp trợ giúp và nội tuyến các phương thức trong pojo của bạn.

4

Đừng lo lắng về việc tối ưu hóa vi mô vô lý như vậy. Lo lắng về khả năng bảo trì. Có vẻ như ứng dụng đó được viết theo kiểu hoàn toàn không phải OO và có thể hưởng lợi rất nhiều từ việc loại bỏ hầu hết các "phương thức trợ giúp" đó và đặt chúng ở nơi chúng thuộc về, với dữ liệu mà chúng hoạt động.

+0

Được rồi, sau đó JDK được viết theo kiểu không phải OO cũng như tất cả của nó là Arrays.sort(), Long.valueOf(), v.v.;) – yanchenko

+0

Có một sự khác biệt lớn giữa việc có một phương pháp tĩnh ở đây và ở đó, và toàn bộ ứng dụng của bạn không có gì ngoài các đối tượng giá trị và tất cả logic trong các phương thức tĩnh (có thể không thực sự như vậy, nhưng đó là cách bạn tạo ra âm thanh) . –

+0

@Michael: nhưng Android thực sự có bộ nhớ thấp. Tôi đang xem xét lời khuyên của bạn tại bài đăng này và một bài đăng tại http://stackoverflow.com/questions/1284718/are-static-methods-good-for-scalability – Emerald214

Các vấn đề liên quan