2010-09-27 34 views
6

Hãy giúp tôi hiểu mô hình Nhà máy và mẫu Singleton, khi chúng ta cần sử dụng mẫu Nhà máy và thời điểm sử dụng mẫu Singleton.Trong trường hợp nào chúng ta sử dụng Mẫu Nhà máy và trong đó Mẫu Singleton?

Lợi thế/bất lợi chính của cái này với cái kia là gì?

Bất kỳ đề xuất (giải thích) nào sẽ giúp tôi rất nhiều.

+0

@Đóng người được hỗ trợ: Tại sao câu hỏi này không có thật? – Vijjendra

+1

Mặc dù có thể hơi ngoài phạm vi và phức tạp và phức tạp một chút, Điều đáng nói là sử dụng khung DI/IoC có thể bắt chước cả hai hành vi tạo ra các đối tượng Singleton-Patterned hoặc Spit chúng như một nhà máy. Bằng cách này, bạn có thể duy trì khả năng kiểm tra cao bởi vì bạn không được kết hợp với các cuộc gọi đơn lẻ tĩnh của mình. Chỉ cần 2c – Aren

+0

@Aren của tôi, thật không may tôi không nghĩ rằng bình luận của bạn sẽ giúp OP nhiều, như bạn dự đoán. –

Trả lời

2

Họ làm hai việc rất khác nhau.

Một nhà máy tồn tại để tạo một hoặc nhiều bản sao của một lớp học. Nó, hoặc một phương thức nó trưng ra, có thể được cung cấp cho một lớp khác mà cần sự phụ thuộc, và lớp phụ thuộc có thể gọi phương thức factory để có được một cá thể.

Một singleton tồn tại để tạo một và CHỈ một bản sao của một lớp. Một tham chiếu đến lớp được lấy tĩnh, nhưng tham chiếu đó sau đó có thể được truyền xung quanh như một cá thể, không giống như một lớp thuần túy thuần túy.

+0

khi chúng ta đang sử dụng mẫu Singleton, chỉ có một cá thể của lớp được tạo, cá thể đó là phổ biến cho tất cả người dùng HOẶC mỗi người dùng có cá thể riêng? – Vijjendra

+0

@Vijjendra - "phổ biến cho tất cả người dùng" HOẶC "mọi người dùng đều có cá thể riêng của họ" phụ thuộc vào việc mã thực thi của bạn có trong cùng một tiến trình hay không. Nó không liên quan gì đến "người dùng". Nếu quá trình của bạn là một ứng dụng web, một cá thể đơn có thể là trường hợp duy nhất cho tất cả các yêu cầu, nhưng nếu máy chủ web của bạn bắt đầu một quy trình công việc/nhiệm vụ khác, có thể có một cá thể đơn lẻ khác trong không gian bộ nhớ cho quá trình đó. –

+0

@Mike: Cảm ơn, xin vui lòng giải thích kịch bản thứ hai (máy chủ web). – Vijjendra

3

Chúng không giống nhau và do đó chúng không có lợi thế hơn nhau. Nếu bạn đang bối rối, đọc lên đầu tiên:

Sử dụng mô hình singleton khi bạn muốn chỉ cho phép một thể hiện của một lớp đối tượng được khởi tạo.

Sử dụng mẫu nhà máy khi bạn cần trừu tượng hóa các chi tiết về sự khởi tạo của lớp đối tượng của bạn.

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