[Design Patterns] Adapter Pattern

Adapter Pattern hoạt động như một cầu nối giữa 2 giao diện không tương thích. Adapter Pattern được xếp vào nhóm các pattern Kiến Trúc. Adapter Pattern sử dụng 01 class đơn để đảm nhiệm việc kết nối các giao diện độc lập hoặc không tương thích. Áp dụng triển khai Chúng ta có 01

Adapter Pattern hoạt động như một cầu nối giữa 2 giao diện không tương thích. Adapter Pattern được xếp vào nhóm các pattern Kiến Trúc.

Adapter Pattern sử dụng 01 class đơn để đảm nhiệm việc kết nối các giao diện độc lập hoặc không tương thích.

Áp dụng triển khai

sơ đồ các class

  • Chúng ta có 01 interface MediaPlaying01 class mô tả thực thể MediaPlayer triển khai giao diện đó. Mặc định thì MediaPlayer có thể phát các tệp định dạng Mp3.
  • Ngoài ra chúng ta còn có 01 interface AdvancedPlaying và các class triển khai giao diện bổ sung này. Các class này có thể phát các tệp Vlc hoặc Mp4.
  • Bây giờ thì chúng ta muốn MediaPlayer có thể phát được các tệp định dạng khác nữa ngoài Mp3 mặc định.
  • Để làm được điều này, chúng ta cần tạo 01 class MediaAdapter triển khai interface MediaPlaying và sử dụng các object AdvancedPlaying để phát tệp được yêu cầu.
  • MediaPlayer sẽ sử dụng MediaApdater bằng cách truyền vào đó định dạng media muốn phát mà không cần biết tới các class thực thụ được sử dụng để phát tệp.
  • Cuối cùng là PatternDemo với code main sẽ sử dụng MediaPlayer để phát các định dạng media khác nhau.

Về mặt quản lý code, chúng ta có 01 package adapterpattern. Code client trong main sẽ chỉ tham chiếu duy nhất tới MediaPlayer và trỏ interface MediaPlaying. Do đó chúng ta sẽ chỉ có duy nhất class MediaPlayerinterface MediaPlaying để mở public. Tất cả các thành phần còn lại của package đều sẽ được đặt access modifierdefault.

Bước 1

Tạo các interface để phát tệp bao gồm MediaPlayingAdvancedPlaying.

adapterpattern/MediaPlaying.java

packageadapterpattern;publicinterfaceMediaPlaying{publicMediaPlayingplay(String mediaType,String fileName);}

adapterpattern/AdvancedPlaying

packageadapterpattern;interfaceAdvancedPlaying{publicAdvancedPlayingplayVlc(String fileName);publicAdvancedPlayingplayMp4(String fileName);}

Bước 2

Tạo các class triển khai interface AdvancedPlaying.

adapterpattern/VlcPlayer.java

packageadapterpattern;classVlcPlayerimplementsAdvancedPlaying{@OverridepublicAdvancedPlayingplayVlc(String fileName){System.out.println("Đang phát tệp Vlc. Tên tệp: "+ fileName);returnthis;}@OverridepublicAdvancedPlayingplayMp4(String fileName){// do nothingreturnthis;}}

adapterpattern/Mp4Player.java

packageadapterpattern;publicclassMp4PlayerimplementsAdvancedPlaying{@OverridepublicAdvancedPlayingplayVlc(String fileName){// do nothingreturnthis;}@OverridepublicAdvancedPlayingplayMp4(String fileName){System.out.println("Đang phát tệp Mp4. Tên tệp: "+ fileName);returnthis;}}

Bước 3

Tạo class MediaAdapter triển khai MediaPlaying.

adapterpattern/MediaAdapter.java

packageadapterpattern;publicclassMediaAdapterimplementsMediaPlaying{AdvancedPlaying advancedPlayer;publicMediaAdapter(String mediaType){
      advancedPlayer =initPlayer(mediaType);}privateAdvancedPlayinginitPlayer(String mediaType){if(mediaType.equalsIgnoreCase("vlc"))returnnewVlcPlayer();if(mediaType.equalsIgnoreCase("mp4"))returnnewMp4Player();elsereturnnull;}@OverridepublicMediaPlayingplay(String mediaType,String fileName
   ){if(mediaType.equalsIgnoreCase("vlc")){
         advancedPlayer.playVlc(fileName);returnthis;}if(mediaType.equalsIgnoreCase("mp4")){
         advancedPlayer.playMp4(fileName);returnthis;}else{System.out.println("Định dạng không được hỗ trợ");returnthis;}}}

Bước 4

Tạo class MediaPlayer triển khai MediaPlaying.

adapterpattern/MediaPlayer.java

packageadapterpattern;publicclassMediaPlayerimplementsMediaPlaying{@OverridepublicMediaPlayingplay(String mediaType,String fileName
   ){if(mediaType.equalsIgnoreCase("mp3")){System.out.println("Đang phát tệp Mp3. Tên tệp: "+ fileName);returnthis;}if(
         mediaType.equalsIgnoreCase("vlc")||
         mediaType.equalsIgnoreCase("mp4")){MediaAdapter adapter =newMediaAdapter(mediaType);
         adapter.play(mediaType, fileName);returnthis;}else{System.out.println("Kiểu tệp không hợp lệ. Định dạng `"+ mediaType +"` không được hỗ trợ.");returnthis;}}}

Bước 5

Sử dụng MediaPlayer để phát các định dạng tệp khác nhau.

PatternDemo.java

importadapterpattern.MediaPlayer;publicclassPatternDemo{publicstaticvoidmain(String[] args){MediaPlayer player =newMediaPlayer();
      player.play("mp3","beyond the horizon.mp3").play("mp4","alone.mp4").play("vlc","far far away.vlc").play("avi","mind me.avi");}}

Bước 6

Kiểm chứng lại kết quả in ra ở console.

console

Đang phát tệp Mp3. Tên tệp: beyond the horizon.mp3
Đang phát tệp Mp4. Tên tệp: alone.mp4
Đang phát tệp Vlc. Tên tệp: far far away.vlc
Kiểu tệp không hợp lệ. Định dạng `avi` không được hỗ trợ.

Nguồn: viblo.asia

Bài viết liên quan

Sự Khác Nhau Giữa Domain và Hosting Là Gì?

Sự khác nhau giữa domain và hosting là gì? Bài này giải thích ngắn và dễ hiểu nh

Shared Hosting hay VPS Hosting: Lựa chọn nào dành cho bạn?

Bài viết giải thích rõ shared hosting và vps hosting là gì và hướng dẫn chọn lựa

Thay đổi Package Name của Android Studio dể dàng với plugin APR

Nếu bạn đang gặp khó khăn hoặc bế tắc trong việc thay đổi package name trong And

Lỗi không Update Meta_Value Khi thay thế hình ảnh cũ bằng hình ảnh mới trong WordPress

Mã dưới đây hoạt động tốt có 1 lỗi không update được postmeta ” meta_key=