Câu hỏi phỏng vấn Design pattern
Câu hỏi

Design pattern Adapter là gì?

Câu trả lời

Thuộc nhóm design pattern structural để các đối tượng không tương thích cộng tác với nhau. Nó hành động như một wrapper giữa hai đối tượng khác nhau. Adapter nhận cuộc gọi từ một đối tượng và biến đổi chúng để đối tượng thứ hai có thể nhận.

Để dễ hiểu ta lấy ví dụ về bộ chuyển đổi từ USB sang Ethernet. Khi ta có một đầu là ethernet và đầu kia là USB, hai đầu này không tương thích nhau nên ta cần có một bộ chuyển đổi. Lớp Client sẽ mong đợi một số kiểu đối tượng và nó có lớp Adaptee có thể cung cấp tính năng tương tư nhưng bằng một interface khác. Bây giờ để cả hai giao tiếp, chúng ta có một lớp Adapter, Client yêu cầu Adapter sử dụng interface Target. Lớp Adapter dịch yêu cầu bằng interface Adaptee. Client nhận được kết quả mà không biết về vai trò của bộ chuyển đổi. Ta có sơ đồ lớp như bên dưới.

Design pattern Adapter là gì?

Bây giờ ta xem xét một interface MediaPlayer được triển khai bởi lớp AudioPlayer. AudioPlayer có thể chạy bài hát định dạng mp3. Mặt khác interface AdvancedPlayer được triển khai bởi lớp MP4Player có thể chạy định dạng mp4 và WAVPlayer chạy định dạng wav. Nếu ta muốn AudioPlayer chạy tất cả định dạng, ta phải sử dụng MediaAdapter để triển khai MediaPlayer và sử dụng đối tượng AdavancedPlayer cho các định dạng cần thiết. Code cho trường hợp này như sau:

java Copy
//MediaPlayer.java
public interface MediaPlayer {
    public void play(String format, String file);
}
java Copy
//AdvancedPlayer.java
public interface AdvancedPlayer { 
    public void playMp4(String file);
    public void playWav(String file);
}
java Copy
//Mp4Player.java
public class Mp4Player implements AdvancedPlayer{
    @Override
    public void playMp4(String file) {
        System.out.println("MP4 File "+ file + " Playing....");  
    }
    
    @Override
    public void playWav(String file) {
        //do nothing
    }
}
java Copy
//WAVPlayer.java
public class WAVPlayer implements AdvancedPlayer{
    @Override
    pub...
middle

middle

Gợi ý câu hỏi phỏng vấn

middle

Trong Design pattern, nguyên tắc Single Responsibility là gì?

senior

Chain of Responsibility là gì? Trong trường hợp nào thì áp dụng pattern này?

senior

Thread-safe với Singleton trong Java là gì?

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào