Pola Adapter
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Java di Coddy. Pelajaran 71 dari 87.
Adapter Pattern adalah pola desain struktural yang memungkinkan antarmuka yang tidak kompatibel bekerja bersama. Pola ini bertindak sebagai jembatan antara dua class, dengan mengubah antarmuka salah satu class menjadi antarmuka yang diharapkan oleh client. Bayangkan seperti adaptor daya yang memungkinkan kamu mencolokkan perangkat Eropa ke stopkontak Amerika.
Bayangkan kamu memiliki interface MediaPlayer yang sudah ada untuk memutar file audio, tetapi kamu perlu mengintegrasikan library pihak ketiga yang menggunakan interface yang sama sekali berbeda untuk memutar video:
// Interface yang sudah digunakan kodemu
interface MediaPlayer {
void play(String filename);
}
// class pihak ketiga dengan interface yang tidak kompatibel
class AdvancedVideoPlayer {
public void playVideo(String filename) {
System.out.println("Playing video: " + filename);
}
}Adapter membungkus class yang tidak kompatibel dan mengimplementasikan antarmuka yang diharapkan, dengan menerjemahkan pemanggilan di antara keduanya:
class VideoPlayerAdapter implements MediaPlayer {
private AdvancedVideoPlayer videoPlayer;
public VideoPlayerAdapter() {
this.videoPlayer = new AdvancedVideoPlayer();
}
public void play(String filename) {
videoPlayer.playVideo(filename);
}
}Sekarang, kode client-mu dapat menggunakan pemutar video melalui antarmuka MediaPlayer yang sudah dikenal:
MediaPlayer player = new VideoPlayerAdapter();
player.play("movie.mp4"); // output: Playing video: movie.mp4Pola Adapter sangat berguna saat mengintegrasikan kode lama atau library pihak ketiga tanpa mengubah kode sumbernya. Client tidak menyadari bahwa ia bekerja dengan class yang telah diadaptasi. Client cukup menggunakan antarmuka yang sudah dikenalnya.
Tantangan
MudahMari buat sistem konversi suhu menggunakan Pola Adapter! Kamu memiliki aplikasi cuaca yang sudah ada dan bekerja dengan suhu Celsius, tetapi kamu perlu mengintegrasikan sensor suhu lama yang hanya menghasilkan pembacaan dalam Fahrenheit. Alih-alih mengubah salah satu sistem, kamu akan membuat adapter yang menjembatani keduanya.
Kamu akan mengatur kodemu dalam empat file:
TemperatureProvider.java: Definisikan interface yang diharapkan oleh aplikasi cuacamu. Interface ini harus mendeklarasikan methodgetTemperatureCelsius()yang mengembalikan double yang mewakili suhu dalam Celsius.FahrenheitSensor.java: Ini mewakili sensor lama dengan interface yang tidak kompatibel. Buat class dengan field double privat untuk suhu dalam Fahrenheit, yang diatur melalui constructor. Class ini harus memiliki methodreadFahrenheit()yang mengembalikan nilai Fahrenheit yang tersimpan.SensorAdapter.java: Buat adapter yang membuat sensor Fahrenheit kompatibel dengan aplikasi cuacamu. Adapter-mu harus mengimplementasikanTemperatureProviderdan membungkus sebuahFahrenheitSensor. SaatgetTemperatureCelsius()dipanggil, adapter harus membaca suhu dari sensor dan mengonversi nilainya ke Celsius menggunakan rumus:(fahrenheit - 32) * 5 / 9.Main.java: Satukan semuanya! Kamu akan menerima satu input: pembacaan suhu dalam Fahrenheit (double).Buat
FahrenheitSensordengan nilai input tersebut. Lalu buatSensorAdapteryang membungkus sensor ini. Simpan adapter dalam variabelTemperatureProvideruntuk menunjukkan bahwa aplikasi cuacamu dapat menggunakannya melalui interface yang diharapkan.Cetak hasil dengan format ini:
Temperature: [celsius] C, dengan celsius diformat hingga satu angka di belakang koma.
Kamu akan menerima satu input: suhu Fahrenheit (double).
Contohnya, dengan input 98.6, output-mu akan menjadi:
Temperature: 37.0 CPerhatikan bahwa class Main bekerja sepenuhnya dengan interface TemperatureProvider. Class ini tidak mengetahui bahwa suhu sebenarnya berasal dari sensor Fahrenheit yang diadaptasi di balik layar. Inilah keunggulan Pola Adapter!
Coba sendiri
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
double fahrenheit = scanner.nextDouble();
// TODO: Buat FahrenheitSensor dengan nilai input
// TODO: Buat SensorAdapter yang membungkus sensor
// TODO: Simpan adapter dalam variabel TemperatureProvider
// TODO: Ambil suhu dalam Celsius dan cetak hasilnya
// Format: "Temperature: [celsius] C" dengan satu angka di belakang koma
// Petunjuk: Gunakan String.format("%.1f", value) untuk pemformatan
}
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Objek
1Dasar-Dasar OOP
File EksternalPengantar OOPClass dan ObjectKata Kunci thisMethodField (Atribut)Method KonstruktorOverloading KonstruktorRangkuman: Kalkulator Sederhana4Pewarisan
Pewarisan Dasar (extends)Kata Kunci superMethod Overriding (@Override)Rantai KonstruktorKelas ObjectPewarisan Tunggal dan BertingkatMengapa Tidak Ada Pewarisan Multi-KelasRangkuman: Hierarki Karyawan7method Khusus & class Object
method toString()equals() dan hashCode()method clone()compareTo() dan ComparableAntarmuka ComparatorUlasan: Pengurutan Kustom10Penanganan Exception dalam OOP
Hierarki class ExceptionException KustomError Checked vs UncheckedPola Try-with-ResourcesRekap: Pengguna Tervalidasi2Modifier Akses & Enkapsulasi
Ikhtisar Tingkat AksesMethod Getter dan SetterPenyembunyian InformasiKata Kunci finalUlasan: Pengelola Rekening Bank5Polimorfisme
Dasar method overloadingMethod overriding (Saat program berjalan)Upcasting dan downcastingOperator instanceofclass dan method abstrakUlasan: Kalkulator Bentuk8Konsep OOP Lanjutan
Komposisi vs PewarisanAgregasi vs Komposisiinner, nested, dan anonymous classEnum dan method Enumrecord (Java 16+)sealed class (Java 17+)11Pola Desain Bagian 1
Pengantar Pola DesainPola SingletonPola FactoryPola BuilderPola ObserverPola Strategy3property class dan Anggota Statis
Variabel Instance vs Statismethod StatisBlok StatisKonstanta (static final)Rangkuman: Penghitung dan Utilitas6Antarmuka & Kelas Abstrak
Pengantar AntarmukaMengimplementasikan AntarmukaImplementasi Beberapa AntarmukaDefault & Static pada AntarmukaKelas Abstrak vs AntarmukaAntarmuka FungsionalRekap: Sistem Pembayaran9Generik
Pengantar GenerikClass GenerikMethod GenerikParameter Tipe BerbatasWildcard (?, extends, super)Ulasan: Wadah Generik12Pola Desain Bagian 2
Pola CommandPola AdapterPola DecoratorPola Template MethodPola StatePola CompositePola IteratorLatihan sendiri: Compiler Java online