1 số bài toán ứng dụng adapter pattern năm 2024
Đúng là như vậy nhưng khi đi vào lĩnh vực lập trình và cụ thể ở đây là Design Pattern thì Adapter có nghĩ là bộ chuyển đổi trung gian. Show
Hai phần cuối là các vấn đề đặt ra của mẫu và các mẫu thiết kế liên quan với Adapter Pattern khá phức tạp khó hiểu nên mình sẽ trình bày trong bài viết tiếp theo. Phần 2 mình cũng sẽ đi vào demo ví dụ cho các bạn luôn nên mình mong phần lý thuyết này các bạn nắm chắc để cùng qua phần 2 thực hành nhé. Cảm ơn các bạn đã đọc và theo dõi bài viết dựa trên bài thuyết trình của nhóm mình và dựa trên Ebook: Design Patterns – Elements of Reusable Object-Oriented Software . Các bạn cùng đón chờ phần 2 về Adapter Pattern nhé! Adapter là một mẫu thiết kế cấu trúc cho phép các đối tượng có giao diện không tương thích có thể tương tác nhau. Đặt vấn đềHãy tưởng tượng rằng bạn đang viết một ứng dụng theo dõi thị trường chứng khoán. Ứng dụng tải dữ liệu từ nhiều nguồn ở định dạng XML, sau đó hiển thị các biểu đồ và sơ đồ đẹp mắt cho người dùng. Tại một thời điểm, bạn quyết định cải thiện ứng dụng bằng cách tích hợp thư viện phân tích thông minh của bên thứ 3. Nhưng có một điểm lưu ý, thư viện chỉ hoạt động với dữ liệu ở định dạng JSON. Bạn không thể sử dụng “nguyên trạng” thư viện phân tích vì nó yêu cầu dữ liệu ở định dạng không tương thích với ứng dụng của bạn.Bạn có thể thay đổi thư viện để làm việc với XML. Tuy nhiên, điều này có thể phá vỡ một số mã hiện có của thư viện. Và tệ hơn, bạn có thể không có quyền truy cập vào mã nguồn của thư viện ngay từ đầu, khiến cho phương pháp này không thể thực hiện được. Giải phápBạn có thể tạo một adapter. Đây là một đối tượng đặc biệt chuyển đổi giao diện của một đối tượng để đối tượng khác có thể hiểu được nó. Adapter bao bọc một trong các đối tượng để che giấu sự phức tạp của quá trình chuyển đổi diễn ra bên trong. Đối tượng được bọc thậm chí không biết về adapter. Ví dụ, bạn có thể bao một đối tượng mà hoạt động theo mét và ki lô mét với một adapter chuyển đổi tất cả các dữ liệu thành các đơn vị feet và mile. Adapter không chỉ có thể chuyển đổi dữ liệu thành nhiều định dạng khác nhau mà còn có thể giúp các đối tượng có giao diện khác nhau tương tác được. Dưới đây là cách nó hoạt động:
Đôi khi, thậm chí có thể tạo adapter hai chiều có thể chuyển đổi lời gọi theo cả hai hướng. Quay lại ứng dụng thị trường chứng khoán của chúng ta. Để giải quyết vấn đề về các định dạng không tương thích, bạn có thể tạo adapter XML sang JSON cho mọi lớp của thư viện phân tích mà chương trình làm việc trực tiếp. Sau đó, điều chỉnh mã để chỉ giao tiếp với thư viện thông qua các adapter này. Khi một adapter nhận được lời gọi, nó sẽ dịch dữ liệu XML đến thành một cấu trúc JSON và chuyển cuộc gọi đến các phương thức thích hợp của một đối tượng phân tích được bao bọc. Cấu trúcObject adapterViệc triển khai này sử dụng nguyên tắc hợp thành đối tượng: adapter thực hiện giao diện của một đối tượng và bao bọc đối tượng khác. Nó có thể được thực hiện trong tất cả các ngôn ngữ lập trình phổ biến.
Class adapterViệc triển khai này sử dụng tính kế thừa: adapter kế thừa các giao diện từ cả hai đối tượng cùng một lúc. Lưu ý rằng cách tiếp cận này chỉ có thể được thực hiện trong các ngôn ngữ lập trình hỗ trợ đa kế thừa, chẳng hạn như C++. Adapter không cần phải bọc bất kỳ đối tượng nào vì nó kế thừa các hành vi từ client và service. Việc điều chỉnh xảy ra trong các phương thức bị ghi đè. Kết quả có thể được sử dụng thay cho một lớp client hiện có. Khả năng áp dụng
Ưu và nhược điểm😄😄😄 Nguyên tắc Đơn trách nhiệm. Bạn có thể tách giao diện hoặc mã chuyển đổi dữ liệu khỏi logic nghiệp vụ chính của chương trình. Nguyên tắc Mở / Đóng. Bạn có thể tạo các kiểu adapter mới trong chương trình mà không vi phạm mã client hiện có, miễn là chúng hoạt động với adapter thông qua giao diện client. 🙁🙁🙁 Độ phức tạp tổng thể của chương trình tăng lên vì bạn cần tạo một tập hợp các giao diện và lớp mới. Đôi khi, đơn giản hơn chỉ là thay đổi lớp service để nó khớp với phần còn lại của chương trình. Mối quan hệ với các mẫu khácBridge thường được thiết kế up-front, cho phép bạn phát triển các phần của ứng dụng một cách độc lập với nhau. Ngược lại, Adapter thường được sử dụng với một ứng dụng hiện có để làm cho một số lớp không tương thích hoạt động với nhau. Adapter thay đổi giao diện của một đối tượng hiện có, trong khi Decorator tăng cường chức năng một đối tượng mà không thay đổi giao diện của nó. Ngoài ra, Decorator hỗ trợ đệ quy, điều này không thể thực hiện được khi bạn sử dụng Adapter. Adapter cung cấp một giao diện khác cho đối tượng được bao bọc, Proxy cung cấp cho nó một giao diện tương tự và Decorator cung cấp cho nó một giao diện tăng cường. Facade định nghĩa một giao diện mới cho các đối tượng hiện có, trong khi Adapter cố gắng làm cho giao diện hiện có có thể sử dụng được. Adapter thường chỉ bao bọc một đối tượng, trong khi Facade hoạt động với toàn bộ hệ thống con của các đối tượng. Bridge, State, Strategy (và ở một mức độ nào đó là Adapter) có cấu trúc rất giống nhau. Thật vậy, tất cả các mẫu này đều dựa trên hợp thành, tức là ủy thác công việc cho các đối tượng khác. Tuy nhiên, chúng đều giải quyết các vấn đề khác nhau. Mẫu thiết kế không chỉ là một công thức để cấu trúc chương trình của bạn theo một cách cụ thể. Nó cũng có thể giao tiếp với các nhà phát triển khác về vấn đề mà mẫu giải quyết. |