[Thực hành] Triển khai Adapter

Structural Design Pattern

Mục tiêu

Luyện tập áp dụng Adapter Pattern.

Mô tả

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 đó.

Ứ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ẫn

Bướ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

  • Đặt tên dự án là FileWorker
  • Thêm thư viện có sẵn vào trong dự án: File > Project Structure > Libraries > + > Java và trỏ đến file .jar vừa tải về ở bước 1.

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 {
long calculateSize(String path);
}

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 {
private FileCalculator fileCalculator;

public Client(FileCalculator fileCalculator) {
this.fileCalculator = fileCalculator;
}

public void printFileSize(String path){
long size = fileCalculator.calculateSize(path);
System.out.println("Size: " + size);
}
}

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.

Bước 5: Tạo lớp FileCalculatorAdapter

public class FileCalculatorAdapter implements FileCalculator {

@Override
public long calculateSize(String path) {
FileUtil fileUtil = new FileUtil();
File file = new File(path);
return fileUtil.calculateSize(file);
}
}

Bước 6: Chạy thử chương trình

public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("Enter file or folder path: ");
String path = scanner.nextLine();
FileCalculator fileCalculator = new FileCalculatorAdapter();
Client client = new Client(fileCalculator);
client.printFileSize(path);
}

Kết quả:

Enter file or folder path: 
/Users/nhat/Desktop
Size: 708637126

Hãy tham gia nhóm Học lập trình để thảo luận thêm về các vấn đề cùng quan tâm.

Leave a Reply

Your email address will not be published. Required fields are marked *