2009-10-15 38 views
14

Nơi phổ biến cho các lớp nhà máy là tĩnh và các phương pháp nhà máy cũng tĩnh.Phương pháp tạo nhà máy luôn tĩnh?

Sách GOF trong sách thiết kế có bao giờ quy định rằng các nhà máy và phương pháp của họ PHẢI là tĩnh để đáp ứng định nghĩa chặt chẽ của mẫu không?

Có các nhà máy +/phương pháp tĩnh chỉ là kết quả của mẫu không? dữ liệu trạng thái thường không được duy trì bởi lớp nhà máy, vì vậy chúng thường tĩnh.

Trả lời

11

Tôi không tin rằng có một thứ như "định nghĩa nghiêm ngặt" của một mẫu. Bởi mô hình tự nhiên của chúng tồn tại để nắm bắt được bản chất của một vấn đề mà cây trồng lên thời gian và thời gian một lần nữa trong phần mềm và phác thảo như thế nào một giải pháp có thể xem xét.

Cụ thể với mẫu Nhà máy, không, không yêu cầu các phương pháp của nhà máy là tĩnh. Bản chất của mẫu là bạn có một đối tượng chịu trách nhiệm tạo ra các thể hiện của một lớp khác. Cách bạn thực hiện điều này thực sự tùy thuộc vào bạn, mặc dù một cách phổ biến, như được mô tả trong mẫu, là sử dụng một phương thức tĩnh trên một lớp. Tuy nhiên, chúng tôi có một cơ chế nhà máy ở một trong những hệ thống của chúng tôi thực sự là hai giai đoạn. Bạn sử dụng một phương thức tĩnh trên một lớp để tạo đối tượng factory, có thể được cấu hình để chọn giữa một tập các triển khai, và sau đó sử dụng đối tượng factory để đóng dấu các thể hiện của đối tượng mà bạn cần thực hiện công việc thực.

Đồng thời xem xét việc triển khai mẫu nhà máy bằng ngôn ngữ không có phương pháp tĩnh. Ví dụ, trong Scala bạn sẽ sử dụng một đối tượng thay vì một lớp. Mặc dù hành vi này rất giống với việc sử dụng các phương thức tĩnh trên một lớp trong Java, bản chất của việc triển khai thực hiện khá khác nhau.

+2

+1 thực sự quan trọng không mong đợi các mẫu làm suy nghĩ của bạn cho bạn, các mẫu không nghiêm ngặt, các mẫu không khoan dung, các mẫu không kiểm soát được! – djna

6

Không, nhà máy có thể giữ trạng thái. Nó phụ thuộc vào những gì cần thiết.

Tôi muốn đề xuất rằng việc tạo tĩnh là lựa chọn tốt trong ví dụ đầu tiên - hovewer thời điểm bạn cố gắng hủy bỏ các số liệu thống kê mà bạn có xu hướng gặp sự cố.

Chỉ đạo cho đến khi bạn cần chúng.

+0

Trên một số ngôn ngữ –

3

Không, lớp nhà máy theo mặc định không được tĩnh. Trên thực tế, các lớp tĩnh không được hoan nghênh trong thế giới OOP vì chúng cũng có thể truyền đạt một số trạng thái và do đó giới thiệu trạng thái ứng dụng toàn cục. Nếu bạn chỉ cần một đối tượng nhà máy có mặt, bạn có thể kiểm soát sự sáng tạo của nó thông qua mẫu đơn.

Trong trường hợp phương pháp nhà máy - bạn có thể giữ nó tĩnh (thực sự không có cách nào hợp lý để đi :)).

0

Tôi đoán rằng BlueCarFactoryRedCarFactory cả hai đều có phương thức createCar. Chỉ cần sử dụng lại phương pháp tạo thực tế bằng cách tham số hóa phương pháp đó. Sau đó, người ta sẽ tạo ra một CarFactory(blue)CarFactory(red). Điều này có nghĩa là đối tượng CarFactory cần một biến thành viên để lưu trữ màu của những chiếc xe được sản xuất.

Kết luận: không có nghĩa là làm cho phương pháp của lớp Nhà máy tĩnh. Nó làm cho tinh thần để tạo ra một đối tượng Nhà máy singleton.

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