Adapter Pattern trong Java – Cách triển khai và ví dụ

Trong hướng dẫn này mình sẽ giới thiệu đến các bạn một trong những Pattern thuộc nhóm Structural Patterns (Mẫu thiết kế kiến trúc) đó là Adapter Pattern.

Ở bài viết này mình sẽ giới thiệu sơ qua các khái niệm về Adapter Pattern và cách triển khai nó như thế nào, sau đó sẽ thực hiện chương trình đơn giản với Adapter Pattern.

Adapter Pattern là gì?

Adapter Pattern có chức năng điều chỉnh interface (giao diện) này sang interface khác. Nó hoạt động như một cầu nối giữa hai interface không liên quan, tương tự như scanner hoạt động như một cầu nối giữa paper và computer.

Điều này giúp các class có các interface khác nhau có thể giao tiếp với nhau thông qua một interface trung gian.

Bài viết này được đăng tại [kiso.vn]

Chương trình đơn giản với Adapter Pattern Java

Interface Builder là giao diện chung nhất, nó cung cấp một phương thức chấp nhận các type building và vị trí của nó.

public interface Builder {
    public void build(String type, String location);
}

Interface AdvancedBuilder cung cấp hai phương thức đó là: buildHouse, buildSkyscrapper.

public interface AdvancedBuilder {
    public void buildHouse(String location);
    public void buildSkyscrapper(String location);
}

Tại đây chúng ta sẽ tạo một class HouseBuilder để thực hiện interface AdvancedBuilder.

public class HouseBuilder implements AdvancedBuilder {
    @Override
    public void buildHouse(String location) {
        System.out.println("Xây dựng một ngôi nhà nằm trong " + location + " khu vực!");
    }
    @Override
    public void buildSkyscrapper(String location) {
    }
}

Cũng tương tự như vậy,chúng ta sẽ tạo thêm một class nữa đó là SkyscrapperBuilder.

public class SkyscrapperBuilder implements AdvancedBuilder {
    @Override
    public void buildSkyscrapper(String location) {
        System.out.println("Xây dựng một tòa nhà chọc trời trong " + location + " khu vực!");
    }
    @Override
public void buildHouse(String location) {
    }
}

Ở đây có một adapter part để kết nối hai interface này.

public class BuilderAdapter implements Builder {
    AdvancedBuilder advancedBuilder;

    public BuilderAdapter(String type) {
        if(type.equalsIgnoreCase("Nhà")) {
            advancedBuilder = new HouseBuilder();
        } else if(type.equalsIgnoreCase("Tòa nhà chọc trời")) {
            advancedBuilder = new SkyscrapperBuilder();
        }
    }

    @Override
    public void build(String type, String location) {
        if(type.equalsIgnoreCase("Nhà")) {
            advancedBuilder.buildHouse(location);
        } else if(type.equalsIgnoreCase("Tòa nhà chọc trời")) {
            advancedBuilder.buildSkyscrapper(location);
        }
    }
}

Khi Adapter hoạt động, chúng ta có thể sử dụng phương thức của các interfaces để xây dựng các building types.

public class BuilderImplementation implements Builder {
    BuilderAdapter builderAdapter;

    @Override
    public void build(String type, String location) {
        if(type.equalsIgnoreCase("Nhà") || type.equalsIgnoreCase("Tòa nhà chọc trời")) {
            builderAdapter = new BuilderAdapter(type);
            builderAdapter.build(type, location);
        } else {
            System.out.println("Loại tòa nhà không hợp lệ.");
        }
    }
}

Cuối cùng chúng ta sẽ tạo một hàm Main để chạy chương trình.

public class Main {
    public static void main(String[] args) {
        BuilderImplementation builderImpl = new BuilderImplementation();

        builderImpl.build("Nhà", "trung tâm");
        builderImpl.build("Tòa nhà chọc trời", "trung tâm thành phố");
        builderImpl.build("Tòa nhà chọc trời", "vùng ngoại ô");
        builderImpl.build("Khách sạn", "trung tâm thành phố");
        System.out.println("-------------------------------------------");
        System.out.println("Chương trình này được đăng tại Kiso.vn");
    }
}

Kết quả sau khi chạy chương trình:

adapter pattern JPG

Như vậy là chúng ta đã cùng nhau tìm hiểu về Adapter Pattern là gì? Và cách triển khai nó như thế nào trong Java. Chúc các bạn thực hiện thành công !!!

Bài viết liên quan

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *