Adapter Pattern trong Java – Code ví dụ Adapter Pattern.

Adapter Pattern trong Java – Code ví dụ Adapter Pattern.

1. Adapter Pattern là gì?

Adapter Pattern là một mẫu cấu trúc (Structural Pattern).

Adapter Pattern cho phép các inteface không liên quan tới nhau có thể làm việc cùng nhau.

Đối tượng giúp kết nối các interface gọi là Adapter.

Ví dụ trong cuộc sống:

  • Cái sạc điện thoại  hoạt động giống như adapter kết nối giữa nguồn điện của điện thoại là 3V với nguồn điện lưới là 240V.
  • Cái phích cắm điện có 3 chân nhưng ổ điện chỉ có 2 lỗ thì phải dùng thêm 1 cái bộ chuyển để chuyển từ 3 chân sang 2 chân – bộ chuyển này cũng được gọi là adapter…

2. Adapter Pattern UML Diagram

Client giao tiếp với inteface Target nhưng cần dùng tới chức năng ở Adaptee.

Target sẽ khai báo chức năng của Adaptee và dùng implement của nó là Adapter để cài đặt lại chức năng đó.

Adapter sẽ giao tiếp với Adaptee để dùng lại 1 phần hoặc toàn bộ chức năng của Adaptee để phục vụ client.

3. Ví dụ

Mình có 1 class CheckNumberAdaptee chuyên thực hiện việc kiểm tra 1 chuỗi ký tự có phải là kiểu số không.

Client bây giờ cần chức năng kiểm tra 1 chuỗi ký tự có phải là số điện không.

Rõ ràng client không thể dùng trực tiếp được CheckNumberAdaptee, ta sẽ dùng thêm class Adapter để thực hiện chức năng kiểm tra số điện thoại bằng cách sử dụng chức năng của CheckNumberAdaptee kiểm tra chuỗi ký tự đó có phải là kiểu số không, nếu đúng thì kiểm tra thêm điều kiện của số điện thoại.

Adapter Pattern trong Java - Code ví dụ Adapter Pattern.

Code Java:

CheckNumberAdaptee.java

public class CheckNumberAdaptee {
  
  public boolean checkNumber(String input) {
    String regex = "[0-9]+";
    return input.matches(regex);
  }

}

PhoneTarget.java

public interface PhoneTarget {
  boolean checkPhoneNumber(String input);
}

Adapter.java (ở đây mình định nghĩa số điện thoại là số có 10 đến 11 số, các bạn có thể check kĩ hơn khi áp dụng thực tế)

public class Adapter implements PhoneTarget {

  CheckNumberAdaptee checkNumberAdapptee = new CheckNumberAdaptee();

  @Override
  public boolean checkPhoneNumber(String input) {
    if (!checkNumberAdapptee.checkNumber(input)) {
      return false;
    }

    if (input.length() > 11 || input.length() < 10) {
      return false;
    }
    return true;
  }

}

Demo:

public class Client {
  public static void main(String[] args) {
    PhoneTarget phoneTarget = new Adapter();
    String input1 = "sdflkqweqweq";
    String input2 = "123";
    String input3 = "01234342342";
    System.out.println(input1 + " is phone number: " + phoneTarget.checkPhoneNumber(input1));
    System.out.println(input2 + " is phone number: " + phoneTarget.checkPhoneNumber(input2));
    System.out.println(input3 + " is phone number: " + phoneTarget.checkPhoneNumber(input3));
  }
}

Kết quả:

sdflkqweqweq is phone number: false
123 is phone number: false
01234342342 is phone number: true

 

Okay, Done!

Thanks các bạn đã theo dõi. Xem thêm các ví dụ khác về design pattern tại: https://stackjava.com/category/design-pattern

References:

https://en.wikipedia.org/wiki/Adapter_pattern

stackjava.com