Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Android SDK
Code

Pola Desain Android: Pola Singleton

by
Difficulty:BeginnerLength:ShortLanguages:

Indonesian (Bahasa Indonesia) translation by Aditia Dwiperdana (you can also view the original English article)

Apa itu pola Singleton?

Pola Singleton adalah pola desain perangkat lunak yang menjamin sebuah kelas hanya punya satu instans dan titik akses globalnya disediakan oleh kelas tersebut. Setiap kali banyak kelas atau klien mengirim permintaan untuk kelas tersebut, mereka mendapatkan instans kelas yang sama. Kelas Singleton ini bisa bertanggung jawab untuk membuat instans diri sendiri, atau kamu bisa mendelegasikan pembuatan objek ke kelas pabrik.

Kita gunakan contoh telepon selular dan pemiliknya. Sebuah telepon biasanya dimiliki oleh satu orang, sedangkan seseorang bisa memiliki banyak telepon. Kapanpun salah satu telepon ini berbunyi, pemilik yang sama yang akan mengangkatnya.

Keuntungan pola Singleton

Pada sebuah aplikasi Android biasa, ada banyak objek yang kita perlu akses terhadap satu instans global, terlepas apakah kamu gunakan langsung atau melemparnya ke kelas lain. Contohnya adalah caches, OkHttpClient, HttpLoggingInterceptor, Retrofit, Gson, SharedPreferences, the repository class, dan lain-lain. Jika kita membuat instans objek-objek tersebut lebih banyak dari satu, kita akan menemui masalah seperti perilaku yang tidak benar, penggunaan sumber daya berlebih, dan hasil lain yang membingungkan.

Implementasi

Cukup mudah untuk mengimplementasi pola ini. Kode berikut menunjukkan bagaimana sebuah Singleton dibuat.

Pada kode di atas, kita memiliki variabel statis INSTANCE untuk menyimpan instans dari kelas tersebut. Kita juga membuat constructor private karena kita ingin memaksakan noninstatiability, hanya kelas tersebut yang bisa membuat instans dirinya sendiri. Fungsi getInstance() menjamin bahwa kelas tersebut dibuat instansnya jika belum, dan mengembalikan instans tersebut kembali ke pemanggil fungsi.

Contoh: membuat satu instans Retrofit

Retrofit adalah library yang populer untuk menghubungkan web service REST dengan menerjemahkan API menjadi antarmuka Java. Untuk mempelajarinya, lihat tutorial saya di Envato Tuts+.

Pada sebuah aplikasi Android, kamu perlu satu instans global dari objek Retrofit agar bagian lain dari aplikasi seperti UserProfileActivity atau SettingsActivity bisa menggunakannya untuk menjalankan permintaan jaringan tanpa perlu membuat instans setiap kali kita membutuhkannya. Membuat beberapa instans akan memenuhi aplikasi kita dengan objek retrofit yang tidak digunakan, sehingga menggunakan memori pada perangkat dengan memori yang terbatas.

Jadi setiap klien A memanggil RetrofitClient.getClient(), kelas itu akan membuat instans jika belum dibuat sebelumnya, lalu jika klien B memanggil fungsi ini, kelas tersebut akan memeriksa apakah instans Retrofit sudah ada. Jika iya, akan mengembalikan instans tersebut pada klien B, tidak membuat instans baru.

Menangani Multithreading

Ada sistem Android, kamu bisa membuat beberapa thread untuk menjalankan pekerjaan yang berbeda-beda. Thread-thread ini bisa menjalankan blok kode yang sama. Dalam kasus kelas Singleton di atas, hal ini bisa mengakibatkan pembuatan instans objek lebih dari satu, yang melanggar kontrak sebuah Singleton. Kode getInstance() pada Singleton yang kita buat tidak aman untuk thread. Sekarang kita lihat cara untuk mengamankannya dari thread.

Sinkronisasi fungsi getInstance()

Satu cara untuk membuat kode singleton aman untuk thread adalah dengan membuat fungsi getInstance() tersinkronisasi. Dengan cara ini hanya satu thread yang boleh menjalankan fungsi di waktu yang sama, memaksa thread lain untuk menjadi kondisi menunggu.

Pendekatan ini membuat kode kita aman untuk thread, tapi merupakan operasi yang mahal. Dengan kata lain, ini bisa membuat aplikasi kita lambat. Kamu perlu memeriksa dan lihat apakah pengurangan performa ini masih bisa ditolerir untuk aplikasimu.

Membuat Instans dengan Segera

Pendekatan lain untuk menangani banyak thread mengakses singleton adalah untuk membuat instans Singleton segera saat kelas di-load atau diinisialisasi (oleh ClassLoader Android pada VM Dalvik). Ini membuat kode aman thread. Lalu instans objek tersebut akan tersedia sebelum thread apapun mengakses variabel INSTANCE.

Kekurangan pendekatan ini adalah kamu bisa berakhir membuat objek yang mungkin tidak akan digunakan, dan menghabiskan memori. Pendekatan ini sebaiknya hanya digunakan jika kamu tahu sebuah singleton akan diakses.

Bonus: Menggunakan Dagger 2

Library dependency injection seperti Dagger bisa membantu kamu menghubungkan dependensi objek dan membuat singleton menggunakan anotasi @Singleton. Ini akan memastikan objek hanya diinitialisasi sekali sepanjang hidup aplikasi.

Pada kode di atas, kita membuat satu instance Gson, Cache, File, OkHttpClient, dan Retrofit agar disediakan dari graph dependensi yang dibuat oleh Dagger.

Untuk belajar tentang Dagger 2, lihat tutorial kami di Envato Tuts+.

Kesimpulan

Pada tutorial pendek ini, kamu belajar tentang pola Singleton pada Android: apa definisinya, keuntungannya, bagaimana mengimplemennya dengan kode kita, dan beberapa cara untuk menangani beberapa thread. Saya juga perlihatkakn bagaimana cara menggunakan library pihak ketiga seperti Dagger 2.

Sementara itu, lihatlah beberapa kursus dan tutorial tentang Java Language dan Android app development.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.