2012-10-07 28 views
5

thể trùng lặp:
Difference between static class and singleton pattern?Singleton v/s lớp với các thành viên tĩnh & phương pháp trong Java

Tại sao người ta sẽ không bao giờ đòi hỏi một và chỉ một ví dụ? Mục đích tương tự có thể đạt được bằng cách sử dụng các lớp với các biến thành viên tĩnh và các phương thức tĩnh.

Theo như tôi có thể tìm ra, có thể có hai câu trả lời có thể để nó -

  1. Khi lớp học của bạn cần phải có nhà nước và bạn muốn chỉ có một đối tượng của nó. Từ quan điểm thiết kế, lớp với các phương thức tĩnh & biến được coi là các lớp Utility và không nên giữ bất kỳ trạng thái nào.

  2. Nếu lớp học của bạn cần tham gia vào đa hình và bạn chỉ muốn một đối tượng của lớp đang nằm trong cây thừa kế.

Sẽ rất hữu ích nếu ai đó có thể cung cấp ví dụ từ kịch bản thực tế hoặc từ bất kỳ API Java nào mà đối tượng Singleton cần tham gia vào Đa hình/Thừa kế?

+0

Kết nối với cơ sở dữ liệu là một trong những ví dụ phổ biến nhất của Singleton. Bạn cần một kết nối. – pidabrow

Trả lời

2

Collections.emptySet() là một ví dụ điển hình về một singleton không thể được triển khai dưới dạng lớp tĩnh vì rõ ràng mục tiêu của nó là thể hiện giao diện java.util.Set. Nó không tốn kém để tạo ra, nhưng nó sẽ là ngu ngốc để tạo ra một cá thể mới mỗi lần một tập rỗng là cần thiết, vì cá thể duy nhất có thể được tái sử dụng.

1

Các lớp thực hiện ghi nhật ký hoặc truy cập thông thường vào cơ sở dữ liệu thường xuyên theo mẫu Singleton. Về cơ bản bất cứ điều gì mà cần phải có phương pháp dụ và đó là tốn kém để xây dựng.

0

Câu trả lời của tôi khá ngắn nhưng đủ để sử dụng chính xác singleton thông thường thay vì thực thi tĩnh. Câu trả lời là:

  • được ưa thích mô hình (có nó là!)
  • Chủ đề (đồng bộ hóa vv)
  • thực hiện Interface (lớp tĩnh của bạn có một số hạn chế)
0

Phạm vi và hành vi là các mối quan tâm khác nhau và KHÔNG nên trộn lẫn. Bạn có thể muốn đối tượng của bạn có sẵn cho mỗi lần sử dụng, mỗi chủ đề, theo yêu cầu web, mỗi phiên hoặc toàn cầu (Singleton). Lý do để thực hiện những điều chỉnh này có thể do quản lý tài nguyên và hiệu suất cuối cùng. Hành vi bên trong lớp của bạn không cần phải thay đổi nếu bạn thay đổi phạm vi của nó.

Singleton là mẫu để chụp một đối tượng thông thường và kiểm soát phạm vi của nó chỉ với một chút mã băm. Lý tưởng nhất là, bạn thực sự không nên thực sự đối phó với phạm vi ở tất cả bên trong đối tượng của bạn và ủy nhiệm cho một nhà máy hoặc container.

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