Sự khác biệt giữa các mẫu thiết kế Facade, Proxy, Adaptor và Decorator là gì?
Tôi chưa bao giờ đọc một lời giải thích rõ ràng, những gì của bạn?
Sự khác biệt giữa các mẫu thiết kế Facade, Proxy, Adaptor và Decorator là gì?
Tôi chưa bao giờ đọc một lời giải thích rõ ràng, những gì của bạn?
Câu trả lời:
Bộ điều hợp điều chỉnh một lớp / đối tượng nhất định cho một giao diện mới. Trong trường hợp trước đây, nhiều thừa kế thường được sử dụng. Trong trường hợp sau, đối tượng được bao bọc bởi một đối tượng bộ điều hợp phù hợp và được truyền xung quanh. Vấn đề chúng ta đang giải quyết ở đây là các giao diện không tương thích .
Facade giống như một cổng đơn giản cho một bộ chức năng phức tạp. Bạn tạo một hộp đen để khách hàng bớt lo lắng tức là làm cho giao diện đơn giản hơn .
Proxy cung cấp giao diện giống như lớp ủy nhiệm và thường tự mình thực hiện một số công việc vệ sinh. (Vì vậy, thay vì tạo nhiều bản sao của một vật nặng, X
bạn tạo các bản sao của một proxy nhẹ P
, lần lượt quản lý X
và dịch các cuộc gọi của bạn theo yêu cầu.) Bạn đang giải quyết vấn đề của khách hàng khỏi việc phải quản lý một đối tượng nặng và / hoặc phức tạp .
Công cụ trang trí được sử dụng để thêm nhiều thuốc súng vào các đối tượng của bạn (lưu ý các thuật ngữ đối tượng - bạn thường trang trí các đối tượng một cách linh hoạt khi chạy). Bạn không ẩn / làm suy yếu các giao diện hiện có của đối tượng mà chỉ mở rộng nó khi chạy .
Bây giờ bạn đã tham gia trang trí, có lẽ bạn sẽ muốn biết lý do tại sao nhấn mạnh vào đối tượng từ - một số ngôn ngữ (như Java) chỉ đơn giản là không cho phép thừa kế ảo (nghĩa là nhiều kế thừa như C ++) để cho phép bạn thực hiện điều này tại thời gian biên dịch.
Vì chúng tôi đã kéo theo nhiều kế thừa (và kim cương đáng sợ), bạn sẽ tìm ra các mixin - được sắp xếp chuỗi tuyến tính của các giao diện để khắc phục các vấn đề của nhiều kế thừa. Tuy nhiên, mixins không trộn tốt. Và chúng tôi kết thúc với những đặc điểm - vâng, những đốm sáng hành vi nhỏ không trạng thái mà bạn thấy bật lên mọi lúc trong các tham số mẫu trong C ++. Các đặc điểm cố gắng giải quyết các vấn đề về thành phần và phân rã hành vi một cách tao nhã trong khi không đi theo nhiều kế thừa hoặc xâu chuỗi theo lệnh.
Mặt tiền
Bạn có thể sử dụng mặt tiền, ví dụ, để thực hiện các cuộc gọi đến API dễ dàng hơn. Hãy xem ví dụ này về một mặt tiền từ xa. Ý tưởng ở đây là việc thực hiện đầy đủ mã trên máy chủ bị ẩn khỏi máy khách. Máy khách gọi 1 phương thức API, lần lượt, có thể thực hiện 1 hoặc nhiều lệnh gọi API trên máy chủ.
Bộ chuyển đổi
Một ví dụ tốt về điều này có thể được tìm thấy ở đây , trên Wikipedia. Một đối tượng khách Source
muốn gọi một phương thức trên một đối tượng khác Target
, nhưng giao diện của đối tượng khác đó khác với những gì khách hàng đang mong đợi.
Nhập đối tượng bộ chuyển đổi.
Nó có thể nhận một cuộc gọi từ Source
đối tượng và, đằng sau hậu trường, gọi Target
phương thức nên được sử dụng.
Source->CallMethodAOnTarget() ---< Adaptor.CallMethodAOnTarget() this calls ---> Target.MethodWithDifferentSignatureAndName(int i)
Đối với Proxy, tôi không có bất kỳ kinh nghiệm nào về mẫu thiết kế này.