Tôi đã đọc cả hai định nghĩa và chúng có vẻ khá giống nhau. Ai có thể chỉ ra sự khác biệt của họ là gì?Sự khác nhau giữa mẫu mặt tiền và bộ điều hợp là gì?
Cảm ơn
Tôi đã đọc cả hai định nghĩa và chúng có vẻ khá giống nhau. Ai có thể chỉ ra sự khác biệt của họ là gì?Sự khác nhau giữa mẫu mặt tiền và bộ điều hợp là gì?
Cảm ơn
Trang wiki Facade Pattern có ghi chú ngắn gọn về điều này.
"Một Adapter được sử dụng khi các wrapper phải tôn trọng một giao diện cụ thể và phải hỗ trợ một hành vi đa hình. Mặt khác, một mặt tiền được sử dụng khi ai muốn một giao diện đơn giản dễ dàng hơn hoặc làm việc với."
Tôi nghe một sự tương tự mà bạn nên nghĩ về điều khiển từ xa phổ quát mà bạn đã thiết lập để làm việc với tất cả các hệ thống âm thanh nổi khác nhau - bạn nhấn "on" và nó bật hộp cáp của bạn và TV của bạn. Có lẽ đó là một rạp hát gia đình thực sự ưa thích và nó làm mờ đèn và vẽ các sắc thái quá. Đó là một mặt tiền - một nút/chức năng mà sẽ chăm sóc một bộ phức tạp hơn các bước.
Mẫu Bộ điều hợp chỉ liên kết hai giao diện không tương thích.
EDIT: Tương tự nhanh cho mẫu Bộ điều hợp (dựa trên nhận xét) có thể giống như bộ điều hợp DVI-to-VGA. Thẻ video hiện đại thường là DVI, nhưng bạn có một màn hình VGA cũ. Với một bộ chuyển đổi cắm vào đầu vào DVI dự kiến của card màn hình của bạn, và có đầu vào VGA riêng của nó, bạn sẽ có thể có được màn hình cũ của bạn làm việc với thẻ video mới của bạn.
Tương tự tuyệt vời khi sử dụng điều khiển từ xa. Lời giải thích mẫu bộ điều hợp là OK, nhưng nó sẽ là tuyệt vời để đến với cùng một loại tương tự. –
Tương tự tuyệt vời thực sự! Một ví dụ Java thế giới thực của mẫu Adapter có thể giúp hiểu nó tốt hơn: ['InputStreamReader'] (http://java.sun.com/javase/6/docs/api/java/io/InputStreamReader.html) điều chỉnh' InputStream' thành 'Reader' và [' OutputStreamWriter'] (http://java.sun.com/javase/6/docs/api/java/io/OutputStreamWriter.html) điều chỉnh 'OutputStream' thành' Writer' Cả hai là các loại trừu tượng khác nhau. – BalusC
@Khnle - Mô hình bộ điều hợp đang hoạt động: http://upload.wikimedia.org/wikipedia/commons/8/80/USB_PS2_Adapters.JPG –
Mặt tiền được thiết kế để tổ chức nhiều dịch vụ phía sau một cổng dịch vụ duy nhất. Một adapter được thiết kế để cung cấp một cách để sử dụng một giao diện đã biết để truy cập một giao diện không xác định.
Mẫu bộ điều hợp cho phép hai, trước đây không tương thích, giao diện để hoạt động với nhau. Có 2 giao diện riêng biệt khi chơi.
Mẫu mặt tiền có giao diện đã biết, đó là cấp thấp/hạt mịn, và kết thúc tốt đẹp với giao diện mức hạt/cấp cao hơn. Có một giao diện duy nhất, đã được đơn giản hóa bằng cách gói với một giao diện khác.
Bộ chuyển đổi làm cho hai giao diện hoạt động cùng nhau.
Mặt tiền cho thấy một lớp duy nhất ở cấp độ cao hơn và hạn chế hơn. Ví dụ: mặt tiền của mô hình chế độ xem chỉ có thể hiển thị các thuộc tính chỉ đọc duy nhất của lớp cấp thấp hơn.
Như thường lệ, có sự giống nhau giữa một số mẫu. Nhưng tôi sẽ nhìn thấy nó như thế này:
Giải thích tốt. Đây là lần đầu tiên tôi bắt gặp từ "sự khác biệt không quan trọng" khi mô tả bộ điều hợp, điều này là đúng sự thật – Sudara
Bộ chuyển đổi == tạo hình vuông có khớp với một lỗ tròn.
Facade == một bảng điều khiển duy nhất để chạy tất cả các thành phần bên trong.
Câu trả lời đó bị dập tắt để hoàn thiện! Tôi bao gồm điều đó trong ghi chú mẫu của tôi. :) –
sự vĩ đại trong sự đơn giản –
Thành thật mà nói, nhiều mẫu có thể được triển khai theo cùng một cách theo chương trình - sự khác biệt là ý định.
Mẫu thiết kế bộ điều hợp có nghĩa là 'dịch' giao diện của một hoặc nhiều lớp thành giao diện mà máy khách mong muốn sử dụng - bộ điều hợp sẽ chuyển các cuộc gọi đến giao diện dự kiến sang giao diện thực tế .
Mẫu mặt tiền được sử dụng khi giao diện đơn giản hơn được mong muốn (và một lần nữa, có thể được triển khai theo cách tương tự bằng cách gói các lớp vi phạm.) Bạn sẽ không nói bạn đang sử dụng mặt tiền khi giao diện hiện tại không tương thích, chỉ khi bạn cần làm cho nó dễ đọc hơn, ít được thiết kế kém hơn, v.v.
Tôi sẽ cố giải thích điều này bằng những từ đơn giản, không có nhiều hình thức.
Hãy tưởng tượng bạn đã có một số lớp miền và từ giao diện người dùng mà bạn muốn tương tác với chúng. Mặt tiền có thể được sử dụng để cung cấp các hàm có thể được gọi từ lớp giao diện người dùng để lớp giao diện người dùng không biết về bất kỳ lớp miền nào khác ngoài mặt tiền. Điều đó có nghĩa là thay vì gọi các hàm trong các lớp miền mà bạn gọi một hàm duy nhất từ mặt tiền, nó sẽ chịu trách nhiệm gọi các hàm cần thiết từ các lớp khác.
Bộ điều hợp, mặt khác, có thể được sử dụng để tích hợp các thành phần bên ngoài khác có thể có cùng chức năng bạn cần nhưng chức năng của chúng không được gọi tương tự. Giả sử bạn có một lớp học Car
trong miền của bạn và bạn làm việc với nhà cung cấp xe hơi bên ngoài có lớp Xe được xác định là tốt. Trong lớp này, bạn có chức năng car.getDoors()
nhưng nhà cung cấp bên ngoài có số car.getNumDoors()
tương đương. Bạn không muốn thay đổi cách bạn gọi hàm này, vì vậy bạn có thể sử dụng lớp bộ điều hợp để bọc lớp Ô tô ngoài để cuộc gọi đến getDoors()
của bộ điều hợp được giao cho getNumDoors()
của lớp bên ngoài.
Tôi đã đọc cả hai định nghĩa và chúng có vẻ khá giống nhau.
Thật sao?
tôi đã nhận thấy rằng thuật ngữ Adaptor đôi khi được dùng để mô tả những gì có trong thực tế, một stategy, có lẽ vì từ là biểu cảm hơn.
Ví dụ, trong Zend Framework, tất cả các Adaptor lớp là trong việc triển khai thực tế của Chiến lược mẫu , bởi vì họ chỉ quấn mã gốc đằng sau lớp học, để có một vài hành vi.
Bộ điều hợp thường được sử dụng để bọc mã cũ hoặc kiểu cũ.
Facade:
takeaways chính: (từ journaldev bài viết của Pankaj Kumar)
Facade:
Adaptor:
Sơ đồ lớp Bộ điều hợp:
Bạn có thể tìm thêm chi tiết về Adaptor trong bài SE này:
Difference between Bridge pattern and Adapter pattern
khác biệt chính:
Có một cái nhìn tại sourcemaking bài viết quá để hiểu rõ hơn.
Thích xem sơ đồ! Chỉ cần một số làm rõ mặc dù, khi tôi thay đổi số lượng/loại tham số không có nghĩa là nó không phải là một Adapter nữa? như 'someMethod (int year, int month)' được gán cho 'someMethod (DateTime start, DateTime end)' hoặc cho phép nói 'someMethod()' ủy nhiệm cho 'someMethod (T param)' –
Nếu cả hai phương thức đều giống nhau lớp, nó được gọi là quá tải. Nếu họ đang ở trong các lớp khác nhau, nó có thể là adpater nếu adapter và mối quan hệ thích ứng được thực hiện –
lời giải thích thực sự tốt đẹp. –
Mặt tiền thường được đối chiếu với Bộ điều hợp.
+--------------------------------------------------------------+-----------------------------------------------+
| Facade | Adapter |
+--------------------------------------------------------------+-----------------------------------------------+
| Simplifies multiple complex components with single interface | Provides differnet interface for an interface |
| Works with multiple components | Works with single component |
| Control panel is an example | A power adapter is an example |
| High-level interface | Low-level interface |
+--------------------------------------------------------------+-----------------------------------------------+
điểm giống nhau? –