Sự khác biệt giữa mẫu Adaptor và mẫu Proxy?


33

Theo như hiểu biết, mẫu bộ điều hợp đang tạo ra một đối tượng trình bao bọc cho đối tượng quan tâm thực sự của chúng ta, chỉ đơn giản là thêm một mức độ gián tiếp, cung cấp tính linh hoạt. tính linh hoạt nằm ở chỗ, nếu giao diện của đối tượng thực bị thay đổi, thì chúng ta sẽ thay đổi giao diện trình bao bọc chỉ vào đối tượng thực, khiến giao diện tiếp xúc phía máy khách không thay đổi.

Mẫu proxy là như nhau, với sự khác biệt là mọi trình bao bọc proxy chỉ cung cấp một tập hợp con nhất quán của chức năng của đối tượng thực. Tại sao điều này sẽ hữu ích, khi chúng tôi cố gắng làm cho "một lớp học cho một mục đích" nằm ngoài tôi.

Tôi đã nhận được điều này một cách chính xác?

Câu trả lời:


55

Không hoàn toàn.

Mục đích chính của mẫu bộ điều hợp là thay đổi giao diện của lớp / thư viện A theo mong đợi của khách hàng B. Việc triển khai điển hình là một lớp bao bọc hoặc tập hợp các lớp. Mục đích không phải là để tạo điều kiện cho những thay đổi giao diện trong tương lai, mà là sự không tương thích của giao diện hiện tại.

Mẫu proxy cũng sử dụng các lớp bao bọc, nhưng cho một mục đích khác. Mục đích của mẫu proxy là tạo ra một bản sao lưu cho một tài nguyên thực sự. Lý do sử dụng proxy có thể là

  • Tài nguyên thực nằm trên một máy tính từ xa (proxy tạo điều kiện cho sự tương tác với tài nguyên từ xa)
  • Tài nguyên thực sự tốn kém để tạo (proxy đảm bảo chi phí không phát sinh trừ khi / cho đến khi thực sự cần thiết)

Điều quan trọng nhất là một proxy cung cấp một sự thay thế thả vào cho tài nguyên thực mà nó là một phần bổ trợ, vì vậy nó phải cung cấp cùng một giao diện.


Trước hết, cảm ơn câu trả lời tuyệt vời. Liệu một proxy có thực hiện tất cả các giao diện mà máy khách hiện tại cần hay nó thực hiện tất cả các giao diện mà tài nguyên thực tế cung cấp?
Vorac

1
@Vorac: Điều đó phụ thuộc vào độ phức tạp của giao diện và triết lý thiết kế của bạn. Cả hai đều có thể, nhưng nếu giao diện lớn / phức tạp hoặc bạn tin tưởng mạnh mẽ vào YAGNI, thì sẽ hợp lý hơn khi chỉ thực hiện những gì bạn cần.
Bart van Ingen Schenau

Vì vậy, do mẫu Bộ điều hợp sử dụng các lớp trình bao bọc, mẫu Bộ điều hợp có phải là mẫu proxy không?
moonman239

@ moonman239: Không, vì ý định sử dụng lớp bao bọc là khác nhau. Chỉ vì hai mẫu trông giống nhau trong sơ đồ lớp không có nghĩa là chúng có liên quan hoặc thực hiện lẫn nhau. Một yếu tố chính cho các mẫu để khác nhau là ý định của họ.
Bart van Ingen Schenau

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.