2010-05-18 34 views

Trả lời

5

Mục đích của mẫu khách truy cập là cho phép các hoạt động mới được thêm vào chế độ thừa kế lớp mà không sửa đổi cho chế độ thừa kế đó. Tôi chưa bao giờ thấy bất kỳ ai đề xuất rằng chỉ các hoạt động chỉ đọc mới được chấp nhận. Hạn chế duy nhất là các hoạt động được thêm vào chỉ nên sử dụng giao diện công cộng của chế độ thừa kế lớp.

2

Tôi không nghĩ rằng bạn có thể đưa ra tuyên bố về chăn dù có tốt hay xấu để sửa đổi trạng thái của bất kỳ điều gì. Tôi nghĩ rằng nó là ok để sửa đổi các tiểu bang miễn là nó không ảnh hưởng đến các logic truy cập chính nó. Ví dụ: bạn có thể viết khách truy cập truy cập tất cả các tệp theo cấu trúc thư mục và đổi tên tệp thành chữ hoa.

+0

Có chắc chắn là trường hợp người ta có thể làm e tuyên bố rằng thay đổi trạng thái là một điều tốt hay xấu. Mẫu khách truy cập được dự kiến ​​sẽ được sử dụng theo cách như một sự thay đổi trạng thái là có thể và thậm chí có khả năng. Trong khi với người quan sát, người quan sát không nên thay đổi trạng thái. –

+0

Điều gì về một người dùng, sự kiện để nhận xét, người nghe punisher mà sẽ cấm người dùng sau khi nói một số từ bạo lực? :-) –

1

Ví dụ của Microsoft về khách truy cập sửa đổi người nhận là ExpressionVisitor. Mục đích của lớp ExpressionVisitor là sửa đổi một cây biểu thức. Vì vậy, tôi đoán Microsoft ít nhất nghĩ rằng đó là chấp nhận được.

+1

Microsoft không phải lúc nào cũng là hướng dẫn tốt nhất về điều đúng và sai: http://ayende.com/blog/35841/review-microsoft-n-layer-app-sample-part-xndash-architecture- for-the-space-age – jason

+0

Cách giải thích tiêu chuẩn khi ai đó nói "thẩm quyền X nghĩ rằng Y là chấp nhận được" là bạn đang ủng hộ Y bằng cách kháng cáo thẩm quyền X. cf. * đối số quảng cáo verecundiam *. – jason

+2

@ Jason Chắc chắn tôi sẽ xem xét Microsoft một cơ quan. Tôi đang nói đây là một ví dụ mà thẩm quyền này tìm thấy mẫu này có thể chấp nhận được. Nhưng tôi có nói rằng họ là "hướng dẫn tốt nhất"? Không. Tôi để nó cho người hỏi để quyết định xem họ có đúng không. –

0

Mỗi mẫu có ưu điểm, nhược điểm và trường hợp sử dụng riêng.

Bạn có thể sử dụng Command mẫu để

  1. tách các Invoker & nhận lệnh

  2. Thực hiện callback cơ chế

  3. Thực hiện Undo và Redo chức năng

  4. Duy trì một lịch sử các lệnh

Sử dụng Visitor mẫu trong các tình huống dưới đây:

  1. hoạt động tương tự phải được thực hiện trên các đối tượng của các loại khác nhau nhóm lại trong một cấu trúc
  2. Bạn cần thực hiện nhiều thao tác riêng biệt và không liên quan. Nó tách Operation từ đối tượng Cấu trúc
  3. Operations mới đã được thêm vào mà không thay đổi trong cấu trúc đối tượng

bài viết liên quan:

Using Command Design pattern

When should I use the Visitor Design Pattern?

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