2011-08-23 23 views
5

Tôi có một ứng dụng có một số lớp xử lý một số chức năng cụ thể, có tuổi thọ bằng chính ứng dụng và có nghĩa là được sử dụng trong nhiều phần của chương trình. Vì lý do cuối cùng này tôi gọi chúng là Dịch vụ. Ví dụ: Dịch vụ âm thanh phát các tệp âm thanh và thực hiện nhiều việc khác liên quan đến âm thanh.các lớp đơn/tĩnh cho các dịch vụ

Các lớp học này được khởi tạo chỉ một lần khi khởi động ứng dụng và không có ý nghĩa gì khi có nhiều hơn một loại cho mỗi loại.

Vì tôi đã đọc nhiều câu trả lời về những người độc thân ở đây trên SO nơi mà việc sử dụng của họ không được khuyến khích, tôi tiếp tục bằng cách chuyển một tham chiếu đến các dịch vụ ngỗng khi cần. Khi dự án đang phát triển, tôi thấy mình có nhiều lớp cần tham khảo dịch vụ trên hàm tạo của chúng và trong một số trường hợp thậm chí là mặt tiền cho các dịch vụ đó để tránh thêm tất cả các tham chiếu dịch vụ.

Tôi nghĩ tôi đang làm sai. Tôi nghĩ rằng đây nên là một sử dụng tốt cho các lớp tĩnh/singleton.

Đây có phải là cách tiếp cận chính xác không?

Trả lời

1

Tôi thấy một câu trả lời gợi ý giới thiệu Mùa xuân. Dưới nắp, mùa xuân vẫn đi qua tham chiếu xung quanh nơi nó là cần thiết.

Thay vì giới thiệu một khuôn khổ mới vào ứng dụng, tại sao không chỉ sử dụng Singleton? Nếu nó thực hiện công việc và dễ duy trì hơn là chuyển một tham chiếu dịch vụ xung quanh, tôi nói sử dụng nó.

Nếu quan tâm của bạn về Singletons là do tác động của chúng đối với khả năng kiểm tra, hãy sử dụng Dependency Injection (mẫu, không phải khung công tác) để giảm ghép nối với triển khai.

2

Dường như bạn cần một thùng chứa phụ thuộc với một số khả năng tự động. Trong trường hợp bạn đang sử dụng Java, hãy xem xét Spring chẳng hạn.

0

Singleton thực sự là viết tắt của các đối tượng chỉ được tạo một lần duy nhất trong suốt vòng đời của ứng dụng. Các đối tượng này thực sự chứa một số cài đặt cố định. Giả sử bạn có một lớp phân tích cú pháp để phân tích cú pháp chỉ là html. Thẻ gốc của HTML phải là thẻ "". Ngoài ra, bạn không muốn tạo ra vô số các cá thể từ lớp trình phân tích cú pháp này vì mọi cá thể của lớp sẽ làm điều tương tự. Ví dụ sẽ nhận được một chuỗi html và sẽ cung cấp cho bạn trở lại X. Nếu bạn nghĩ rằng các lớp học của bạn sẽ chỉ làm một điều tại một thời điểm, bạn có thể đi cho singleton. Tuy nhiên, nếu bạn nói rằng, ví dụ, Dịch vụ âm thanh của bạn sẽ phát các âm thanh khác nhau tại một thời điểm, tôi nghĩ rằng việc tạo một thể hiện của một lớp tốt hơn làm cho nó trở nên đơn điệu.

0

Tôi đồng ý với MikeG. Sử dụng một singleton. Vì bạn nói những lớp này chủ yếu là dịch vụ theo định hướng, tôi sẽ không mong đợi nó gây ra bất kỳ vấn đề nào.

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