Tôi đã đọc cả hai định nghĩa và chúng có vẻ khá giống nhau. Bất cứ ai có thể chỉ ra sự khác biệt của họ là gì?
Cảm ơn
Tôi đã đọc cả hai định nghĩa và chúng có vẻ khá giống nhau. Bất cứ ai có thể chỉ ra sự khác biệt của họ là gì?
Cảm ơn
Câu trả lời:
Các mẫu Facade trang wiki có một lưu ý ngắn gọn về vấn đề này.
"Bộ điều hợp được sử dụng khi trình bao bọc phải tôn trọng một giao diện cụ thể và phải hỗ trợ hành vi đa hình. Mặt khác, một mặt tiền được sử dụng khi người ta muốn một giao diện dễ làm việc hơn hoặc đơn giản hơn."
Tôi đã nghe một phép tương tự mà bạn nên nghĩ đến điều khiển từ xa đa năng mà bạn đã thiết lập để hoạt động với tất cả các hệ thống âm thanh nổi khác nhau của mình - bạn nhấn "bật" và nó sẽ bật hộp cáp, bộ thu và TV của bạn. Có lẽ đó là một rạp hát gia đình thực sự lạ mắt và nó cũng làm mờ đèn và vẽ các sắc thái. Đó là Mặt tiền - một nút / chức năng thực hiện một loạt các bước phức tạp hơn.
Mẫu Bộ điều hợp chỉ liên kết hai giao diện không tương thích.
CHỈNH SỬA: Một sự tương tự nhanh chóng cho mẫu Bộ điều hợp (dựa trên các nhận xét) có thể giống như một bộ chuyển đổi DVI-to-VGA. Các card màn hình hiện đại thường là DVI, nhưng bạn có một màn hình VGA cũ. Với bộ điều hợp cắm vào đầu vào DVI dự kiến của thẻ video và có đầu vào VGA riêng, bạn sẽ có thể làm cho màn hình cũ hoạt động với thẻ video mới.
InputStreamReader
đó thích nghi InputStream
để Reader
và OutputStreamWriter
đó thích nghi OutputStream
để Writer
Cả hai là những loại trừu tượng khác nhau.
Bộ điều hợp == làm cho một chốt vuông vừa vặn với một lỗ tròn.
Mặt tiền == 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.
Thành thật mà nói, nhiều mẫu có thể được triển khai theo cùng một cách lập trình - sự khác biệt nằm ở mục đích.
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à khách hàng mong đợi sử dụng - bộ điều hợp sẽ dịch các lệnh gọi đến giao diện mong đợi thành giao diện thực tế mà các lớp được bao bọc sử dụng.
Mẫu Mặt tiền được sử dụng khi muốn có một giao diện đơn giản hơn (và một lần nữa, có thể được triển khai theo cách tương tự bằng cách bao bọc các lớp vi phạm.) Bạn sẽ không nói rằng bạn đang sử dụng một 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 thiết kế kém hơn, v.v.
Mặt tiền:
Những điều quan trọng: (từ bài báo của journaldev của Pankaj Kumar)
Sơ đồ lớp mặt tiền:
Bộ chuyển đổi:
Sơ đồ lớp của Bộ điều hợp:
Bạn có thể tìm thêm chi tiết về Bộ điều hợp trong bài đăng SE này:
Sự khác biệt giữa mẫu Bridge và mẫu Adapter
Sự 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.
someMethod(int year, int month)
đã được giao cho someMethod(DateTime start, DateTime end)
hoặc cho phép nói someMethod()
giao chosomeMethod(T param)
Một mặt tiền được thiết kế để tổ chức nhiều dịch vụ đằng sau một cổng dịch vụ duy nhất. Bộ điều hợp được thiết kế để cung cấp 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ục đích của một
mặt tiền là sự đơn giản
bộ điều hợp là khả năng tương tác .
Mặt tiền thường tương phản 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 |
+--------------------------------------------------------------+-----------------------------------------------+
Như thường lệ, có những điểm tương đồng giữa một số mẫu. Nhưng tôi sẽ thấy nó như thế này:
Tôi sẽ cố gắng giải thích điều này bằng những từ ngữ đơn giản, không cần 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, bạn muốn tương tác với chúng. Một mặt tiền có thể được sử dụng để cung cấp các chức năng 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, bạn gọi một hàm duy nhất từ mặt tiền, hàm này sẽ chịu trách nhiệm gọi các hàm cần thiết từ các lớp khác.
Mặt khác, bộ điều hợp 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 mà bạn cần nhưng các chức năng của chúng không được gọi hoàn toàn giống nhau. Giả sử bạn đã có một Car
lớp trong miền của mình và bạn làm việc với một nhà cung cấp ô tô bên ngoài cũng có hạng Xe được xác định. Trong lớp này, bạn đã có chức năng car.getDoors()
nhưng trình cung cấp bên ngoài có chức năng tương đương car.getNumDoors()
. Bạn không muốn thay đổi cách gọi hàm này, vì vậy, bạn có thể sử dụng một lớp bộ điều hợp để bọc lớp Xe bên ngoài để một lệnh gọi tới getDoors()
bộ điều hợp được ủy quyền cho getNumDoors()
lớp bên ngoài.
Mẫu bộ điều hợp cho phép hai giao diện, trước đây không tương thích, hoạt động với nhau. Có 2 giao diện chơi riêng biệt.
Mẫu Mặt tiền lấy một giao diện đã biết, có cấp độ thấp / chi tiết tốt và bao bọc nó bằng giao diện cấp độ / khóa học cao hơn. Có một giao diện duy nhất, đã được đơn giản hóa bằng cách kết hợp với một giao diện khác.
Bộ điều hợp làm cho hai giao diện hoạt động cùng nhau.
Mặt tiền hiển thị một lớp duy nhất ở mức cao hơn và hạn chế hơn. Ví dụ, một mặt tiền của mô hình dạng xem chỉ có thể hiển thị các thuộc tính chỉ đọc nhất định của một lớp cấp thấp hơn.
Mặt tiền
Tóm tắt độ phức tạp để cung cấp một giao diện đơn giản hơn. Ví dụ, một hệ điều hành máy tính tóm tắt sự phức tạp của phần cứng bên dưới. Hoặc ngôn ngữ lập trình cấp cao (Python / JavaScript) làm giảm độ phức tạp khi so sánh với ngôn ngữ cấp thấp (C).
Bộ chuyển đổi
Nó tương tự như một bộ điều hợp phần cứng. Giả sử bạn muốn kết nối a USB device
với a serial port
, bạn sẽ cần a USB-serial port adapter
.
Mẫu bộ điều hợp liên kết hai giao diện không tương thích bằng cách cung cấp một giao diện mới.
Mẫu mặt tiền đơn giản hóa một hệ thống con phức tạp (có nhiều thành phần) với một giao diện duy nhất.
Sự khác biệt giữa hai mẫu này là rõ ràng, nhưng không phải trong lĩnh vực của Mẫu thiết kế, mà là Mô hình miền. Trong phần sau, tôi sẽ giải thích lý do tại sao.
Đầu tiên, tôi muốn nhắc lại những người khác đã nói ở đây và sau đó tôi sẽ thêm ghi chú:
Mặt tiền là một giao diện cho một hệ thống con (một hệ thống bên ngoài hoặc một hệ thống kế thừa) giúp đơn giản hóa việc truy cập cho khách hàng (chúng tôi). Facade ẩn giao diện của hệ thống con khác (tổng hợp một số lệnh gọi hoặc ẩn một số API mà chúng tôi không cần), do đó, khách hàng của bạn chỉ truy cập hệ thống con đó thông qua Facade này.
Mặt khác, Bộ điều hợp là một trình bao bọc xung quanh một dịch vụ hoặc đối tượng khác. Nó làm cho đối tượng được bọc tuân theo một giao diện tiêu chuẩn mà khách hàng mong đợi. Giả sử có một phương thức trên đối tượng "Sổ cái" mà bạn cần thực hiện một tinh chỉnh (thay đổi các tham số, đổi tên của nó, v.v.). Bạn có thể bọc nó bằng bộ chuyển đổi.
Bây giờ, sự khác biệt vẫn có thể không rõ ràng. Đó là nơi tôi muốn đưa ra sự khác biệt chính giữa hai mẫu này để không có chỗ cho sự nhầm lẫn thêm :
Facade không thay đổi mô hình miền của hệ thống con khác, trong khi Bộ điều hợp thì có. Đây là điểm khác biệt chính. Giai đoạn = Stage.
Đó là lý do tại sao bạn kết hợp hai điều này khi bạn tạo một Lớp chống tham nhũng . Giả sử bạn có hệ thống con mà bạn muốn sử dụng, nhưng bạn không muốn mô hình miền của nó làm xáo trộn mô hình miền của bạn. Bạn sẽ làm gì? Bạn sẽ tạo một Lớp chống tham nhũng. Làm sao? Trước tiên, bạn tạo một Mặt tiền để đơn giản hóa việc truy cập giao diện cho hệ thống con, sau đó là các bộ điều hợp cho các đối tượng miền được sử dụng trong giao diện đó (hãy nhớ rằng mặt tiền vẫn giữ mô hình miền cho hệ thống con khác), vì vậy nó phù hợp với mô hình của bạn.
Nhiều mẫu thiết kế có thể được sử dụng trong mô hình miền. Điều này cũng đúng với các mẫu thiết kế Mặt tiền và Bộ điều hợp. Mặc dù sự khác biệt giữa hai mẫu này có thể không rõ ràng trong lĩnh vực "mẫu thiết kế", nhưng rõ ràng hơn trong lĩnh vực "mô hình hóa miền".
Tôi đã đọc cả hai định nghĩa và chúng có vẻ khá giống nhau.
Có thật không ?
Tôi nhận thấy rằng thuật ngữ Bộ điều hợp đôi khi được sử dụng để mô tả những gì trên thực tế là Trạng thái , có thể vì từ này biểu cảm hơn.
Ví dụ, trong Zend Framework , tất cả các lớp Bộ điều hợp trên thực tế là triển khai của mẫu Chiến lược , bởi vì chúng chỉ bọc mã gốc phía sau các lớp, để có một số hành vi.
Bộ điều hợp thường được sử dụng để bọc mã kế thừa hoặc "kiểu cũ".