Đây là một bài viết cũ nhưng dù sao tôi cũng sẽ đồng ý vì các câu trả lời khác không giải quyết được những gì đang xảy ra khi sử dụng một trong hai mẫu, chúng dường như thiên về lý thuyết hơn là thực hành.
Cách thức hoạt động của Đoàn và Quan sát viên
Với Phái đoàn, đại biểu chọn chính xác người sẽ phản ứng với một sự kiện cụ thể vào thời điểm nguồn gốc của sự kiện tiềm năng được tạo ra. Bạn có thể nghĩ về người nghe này như một người quan sát duy nhất . Trong trường hợp mẫu Người quan sát, người quan sát chọn người mà họ đang quan sát bất cứ khi nào cảm thấy như vậy; vì vậy các phụ thuộc được đảo ngược khi nói đến người quan sát so với phái đoàn. Với mô hình quan sát, hãy nghĩ về một tờ báo và người đăng ký như những người quan sát. Các nhà quan sát kiểm soát thời điểm mối quan hệ được tạo ra. Với phái đoàn nghĩ về một nhân viên và một chủ nhân. Nhà tuyển dụng kiểm soát thời điểm mối quan hệ được tạo ra và chính xác ai là người chịu trách nhiệm cho các sự kiện cụ thể. Nhân viên không thể chọn những nhiệm vụ họ đang làm ... nói chung.
Một số phái đoàn tranh luận có thể có một người quan sát nhưng tôi nghĩ rằng sự khác biệt thực sự giữa hai người là cách xử lý sự kiện được chỉ định. Bạn sẽ không bao giờ thấy một đại biểu đăng ký cho một sự kiện. Nó sẽ không bao giờ biết nó thậm chí xử lý sự kiện cho đến khi nó xảy ra và đại biểu gọi một phương thức công khai trên nó.
Lợi thế của phái đoàn
Mẫu này rất cứng nhắc và với hầu hết các thiết kế regid đơn giản hơn và thường mạnh mẽ hơn. Nó buộc bạn phải khai báo xử lý sự kiện của bạn lên phía trước tại thời điểm khởi tạo nguồn của sự kiện tiềm năng. Nếu bạn cần ai đó điều khiển giao thông, bạn chỉ định một giám đốc giao thông trước khi bạn mở đường. Trong trường hợp của người quan sát, bạn sẽ cho phép cảnh sát giao thông chọn thời điểm điều khiển giao thông bất cứ khi nào họ cảm thấy thích.
Bất lợi cho đoàn
Nhược điểm của thiết kế này là nó không linh hoạt. Nếu bạn đang thực hiện một số mã để đăng ký một tờ báo, tờ báo / đại biểu sẽ phải xác định chính xác ai có thể đọc những câu chuyện tin tức thứ hai mà họ được tạo. Với mẫu người quan sát họ có thể đăng ký sau bất cứ lúc nào và tờ báo sẽ chỉ phải biết rằng một người mới đã đăng ký.
Khi nào nên chọn Đoàn?
Khi bạn cần một người quan sát cụ thể chắc chắn và không có lý do gì để bạn thay đổi người đang quan sát thì thiết kế cứng nhắc của mẫu ủy nhiệm sẽ có lợi.
Ví dụ: bạn cần một lớp / đối tượng để xử lý việc tạo một cửa sổ bật lên cho một lỗi cụ thể. Không có nhiều lý do tại sao vào thời gian chạy, bạn sẽ cần phải chuyển người đang xử lý một lỗi cụ thể để ủy thác lỗi "Hết bộ nhớ" cho một thực thể duy nhất sẽ có ý nghĩa. Tạo một mảng các trình xử lý tiềm năng và sau đó các trình xử lý đó đăng ký cho lỗi "Hết bộ nhớ" sẽ không có ý nghĩa gì nhiều; đó sẽ là một ví dụ về việc sử dụng mẫu quan sát viên trong tình huống này. Vào thời gian chạy, bạn có thể muốn thay đổi phương thức nào được gọi hoặc "đại biểu" nào được gọi cho các sự kiện thay đổi nhưng việc trao đổi một trình xử lý sự kiện cho một sự kiện cụ thể vào thời gian chạy là không bình thường.
Không thể trao đổi các đại biểu như bạn sẽ làm trong mô hình quan sát viên, nó chỉ phức tạp. Trong thế giới thực, có lẽ bạn muốn trao đổi cảnh sát giao thông để một đại biểu mới đang xử lý lưu lượng. Người ta có thể lập luận rằng một thiết kế tốt hơn sẽ biến đại biểu ban đầu thành một đồn cảnh sát và không phải là một sĩ quan cảnh sát duy nhất mà tôi ...