Kaitou kid code

Khi siêu đạo chích đi code dạo :)

Chào các bạn, hôm nay mình sẽ viết bài về Adapter Pattern trong Java.
Nghe cái tên Adapter là chúng ta đã có thể hiểu được một chút ý nghĩa của Pattern này rồi nhỉ?
Nó là cấu nối trung gian 🙂
Adapter pattern rất hay sử dụng trong lập trình, và bạn cũng có thể gặp chúng nhiều trong đời sống
hàng ngày. Ví dụ như đầu đọc thẻ chẳng hạn, tại sao lại phải có đầu đọc thẻ nhớ? Bởi vì thẻ nhớ và máy
tính kết nối không được trực tiếp với nhau. Vì vậy bạn sẽ phải dùng đầu đọc thẻ để gắn thẻ nhớ vào, sau đó
cắm đầu đọc thẻ vào máy tính, khi đó bạn mới có thể sao chép, ghi dữ liệu lên thẻ nhớ được.
Vậy ý nghĩa Adapter Pattern trong lập trình là gì?
Khi bạn đang có các Interface, các class xử lý một bài toán ổn ổn ở thời điểm hiện tại.
Tuy nhiên theo thời gian, các ứng dụng cần nâng cấp và có bài toán mới hơn, bạn có các Interface,
các class mới để giải quyết được vấn đề. Nhưng bạn vẫn muốn sử dụng các Interface, class trước với
Interface, class mới. Lúc này bạn cần phải sử dụng Adapter Pattern. Nó sẽ có nhiệm vụ gắn kết, cầu nối
giữa 2 cái mới, cũ của bạn với nhau.
Mình sẽ demo code với ví dụ về việc play music.
Bạn có 1 class xử lý play file audio. Tuy nhiên thời điểm trước đó chỉ yêu cầu xử lý với
file .mp3 và bạn code ngon lành. Tuy nhiên yêu cầu mới là xử lý với .mp4, .vlc chẳng hạn.
Và 1 team khác đã làm tốt việc này. Việc của bạn là tích hợp xử lý của team kia vào chương trình của bạn
để có thể play được 3 loại file .mp3, .mp4 và .vlc, thông qua cách gọi của class mà bạn đã code.

adapter_pattern_uml_diagram
adapter_pattern_uml_diagram

Dựa vào mô hình trên, mình sẽ cấu trúc chương trình như sau.

Ban đầu mình có interface MediaPlayer và class AudioPlayer sẽ implement từ interface MediaPlayer.

Đây là code bạn sẽ triển khai.

Chúng ta cũng có thêm một interface khác là AdvancedMediaPlayer và class thực thi interface này là AdvancedMediaplayer. Class này có thể play được file định dạng Mp4 và Vlc.

Mục tiêu của chúng ta là làm sao để class AudioPlayer trước đó chúng ta có có thể play được tốt các định dạng file này.

Chính vì vậy cần phải có 1 Adapter để kết nối MediaPlayer interface sử dụng AdvancedMediaPlayer để play các định dạng file mà trước đó không thực hiện được.

Vậy thì AudioPlayer sử dụng class adapter MediaAdapter dựa vào các định dạng file mà có thể  thực hiện play tương ứng.

Bước 1: Tạo các interface xử lý.

class MediaPlayer.java

class AdvancedMediaPlayer.java

Bước 2: Tạo các class thực thi interface AdvancedMediaPlayer.

class VlcPlayer.java

class Mp4Player.java

Bước 3: Tạo class adapter thực thi interface MediaPlayer

class MediaAdapter.java

 

Bước 4: Tạo class thực thi interface MediaPlayer.

class AudioPlayer.java

Và cuối cùng chúng ta tạo class Demo để chạy. class AdapterPatternDemo.java

Như vậy, các bạn đã biết cách sử dụng Adapter Pattern để có thể cải tiến, nâng cấp ứng dụng dựa trên một cầu nối trung gian.

Chúc các bạn code vui vẻ ^^! 🙂

PS: Bài viết có sưu tầm từ nguồn:

https://www.tutorialspoint.com/design_pattern/adapter_pattern.htm

Bình luận qua Facebook

One thought on “Java Design Pattern – Adapter

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 *