1 số bài toán ứng dụng adapter pattern trong c++ năm 2024
Trong phần này, chúng ta sẽ phát triển một ứng dụng cho phép hiển thị kích thước của một file hoặc một thư mục dựa vào đường dẫn của file hoặc thư mục đó. Show Ứng dụng sẽ sử dụng lại một thư viện có sẵn hỗ trợ việc tính toán kích thước của file hoặc thư mục. Tuy nhiên, thư viện có sẵn này lại nhận đầu vào là một đối tượng của lớp java.io.File thay vì đường dẫn của file hoặc thư mục như mong muốn. Do đó, chúng ta cần phát triển một lớp Adapter cho phép chuyển đổi từ việc sử dụng đường dẫn sang sử dụng đối tượng java.io.File để có thể sử dụng được thư viện có sẵn. Hướng dẫnBước 1. Tải thư viện có sẵn về Tải file codegym-file-utils.jar về máy tính: https://github.com/codegym-vn/codegym-file-util Bước 2: Tạo dự án mới
Bước 3: Tạo interface FileCalculator Interface FileCalculator định nghĩa phương thức calculateSize() trong đó nhận vào tham số là một chuỗi đường dẫn của file. public interface FileCalculator { }Bước 4: Tạo lớp Client Lớp Client có phương thức printFileSize() để hiển thị kích thước của file. public class Client {
}Lưu ý: Lớp Client không trực tiếp sử dụng được lớp JavaUtil từ thư viện có sẵn, do đó chúng ta cần tạo một lớp FileCalculatorAdapter để thực hiện việc chuyển đổi. Hãy tưởng tượng rằng chúng ta đang tạo một ứng dụng theo dõi thị trường chứng khoán. Ứng dụng tải xuống dữ liệu kho từ nhiều nguồn ở định dạng XML và sau đó hiển thị các biểu đồ và sơ đồ đẹp mắt cho người dùng. Một lúc nào đó, ta 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 phân tích chỉ hoạt động với dữ liệu ở định dạng JSON. Chúng ta có thể thay đổi thư viện để làm việc với XML. Tuy nhiên, điều này có thể ảnh hưởng đến những đoạn code hiện có, khiến cho cách tiếp cận này không thể thực hiện được.Chúng ta có thể giải quyết vấn đề này bằng cách tạo ra các Adapter để chuyển từ định dạng XML sang JSON cho mỗi lớp của thư viện phân tích. Sau đó, chúng ta điều chỉnh mã của mình để chỉ giao tiếp với thư viện thông qua các Adapter này. Khi một Adapter nhận được yêu cầu, nó sẽ dịch dữ liệu XML sang JSON và chuyển yêu cầu đến các phương thức thích hợp của đối tượng phân tích trong thư viện. 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ó interface khác nhau collab với nhau.Đây là cách nó hoạt động:
3. Kiến trúcCó hai cách để thực hiện Adapter Pattern dựa theo cách cài đặt (implement) của chúng: a. Object Adapter – CompositionTrong mô hình này, một lớp mới (Adapter) sẽ tham chiếu đến một (hoặc nhiều) đối tượng của lớp có sẵn với interface không tương thích (Adaptee/Service), đồng thời cài đặt interface mà người dùng mong muốn (Target). Trong lớp mới này, khi cài đặt các phương thức của interface người dùng mong muốn, sẽ gọi phương thức cần thiết thông qua đối tượng thuộc lớp có interface không tương thích. Các thành phần trong mô hình:
b. Class Adapter – InheritanceTrong mô hình này, một lớp mới (Adapter) sẽ kế thừa lớp có sẵn với interface không tương thích (Adaptee/Service), đồng thời cài đặt interface mà người dùng mong muốn (Target). Trong lớp mới, khi cài đặt các phương thức của interface người dùng mong muốn, phương thức này sẽ gọi các phương thức cần thiết mà nó thừa kế được từ lớp có interface không tương thích. Các thành phần:
So sánh Class Adapter và Object Adapter
4. Ưu & nhược điểmƯu điểm
Nhược điểm
5. Khi nào thì sử dụngAdapter được sử dụng khi:
6. Source code minh họa với C#
Bài viết của mình đến đây là kết thúc, cảm ơn các bạn đã theo dõi. Nếu các bạn thấy có ích có thể khám phá thêm Series Design Patterns - Trợ thủ đắc lực của Developers của mình!! |