Design pattern Adapter là gì?
Design pattern Adapter là gì?
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.
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:
//MediaPlayer.java
public interface MediaPlayer {
public void play(String format, String file);
}
//AdvancedPlayer.java
public interface AdvancedPlayer {
public void playMp4(String file);
public void playWav(String file);
}
//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
}
}
//WAVPlayer.java
public class WAVPlayer implements AdvancedPlayer{
@Override
pub...
middle
Gợi ý câu hỏi phỏng vấn
Chưa có bình luận nào