Pola Singleton
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Dart di Coddy. Pelajaran 90 dari 110.
Pola Singleton memastikan bahwa sebuah class hanya memiliki satu instance di seluruh aplikasi kamu, dan menyediakan titik akses global untuk instance tersebut. Ini berguna saat hanya diperlukan satu object untuk mengoordinasikan tindakan di seluruh sistem, seperti pengelola konfigurasi, koneksi database, atau layanan pencatatan log.
Di Dart, kamu dapat mengimplementasikan Singleton dengan menggunakan konstruktor factory yang digabungkan dengan instance statis privat:
class AppConfig {
static final AppConfig _instance = AppConfig._internal();
String appName = 'MyApp';
String version = '1.0.0';
// Constructor bernama privat
AppConfig._internal();
// Factory constructor mengembalikan instance yang sama
factory AppConfig() {
return _instance;
}
}
void main() {
var config1 = AppConfig();
var config2 = AppConfig();
config1.appName = 'UpdatedApp';
print(config2.appName); // UpdatedApp
print(identical(config1, config2)); // true
}Konstruktor privat _internal() mencegah pembuatan instance dari luar. Field statis _instance menyimpan satu-satunya instance, yang dibuat sekali saat class dimuat. Setiap pemanggilan AppConfig() mengembalikan instance yang sama, sehingga perubahan yang dibuat melalui satu referensi terlihat di semua tempat.
Gunakan Singleton secukupnya, karena Singleton memperkenalkan state global yang dapat membuat pengujian lebih sulit. Singleton paling cocok untuk resource bersama yang benar-benar perlu memiliki state yang konsisten di seluruh aplikasi.
Tantangan
MudahMari buat pengelola pengaturan game menggunakan pola Singleton! Kamu akan membuat sistem yang memastikan hanya ada satu instance pengaturan game di seluruh aplikasi, sehingga semua bagian game-mu menggunakan konfigurasi yang sama.
Kamu akan mengatur kodemu ke dalam dua file:
game_settings.dart: Buat classGameSettingsyang menerapkan pola Singleton. Pengelola pengaturanmu harus memiliki:- Instance private static final yang menyimpan satu-satunya object
GameSettings - Constructor bernama private untuk mencegah pembuatan instance dari luar
- Constructor factory yang selalu mengembalikan instance yang sama
- Tiga field pengaturan:
difficulty(String, default: "Normal"),soundEnabled(bool, default: true), danplayerName(String, default: "Player1") - Method
displaySettings()yang mencetak pengaturan saat ini dalam format ini:Settings: [playerName] | Difficulty: [difficulty] | Sound: [on/off](cetak "on" jika soundEnabled bernilai true, dan "off" jika false)
- Instance private static final yang menyimpan satu-satunya object
main.dart: Impor pengaturan game-mu dan tunjukkan bahwa Singleton berfungsi dengan benar:- Dapatkan instance pengaturan dan beri nama
settings1 - Panggil
displaySettings()untuk menampilkan nilai default - Ubah pengaturan: ubah
playerNamemenjadi "Hero",difficultymenjadi "Hard", dansoundEnabledmenjadi false - Dapatkan referensi lain ke pengaturan dan beri nama
settings2 - Panggil
displaySettings()padasettings2untuk membuktikan bahwa pengaturan tersebut mencerminkan perubahan yang dibuat melaluisettings1 - Cetak apakah
settings1dansettings2identik menggunakan:Same instance: [true/false]
- Dapatkan instance pengaturan dan beri nama
Ini menunjukkan manfaat utama Singleton: perubahan yang dibuat di bagian mana pun dalam aplikasi akan langsung terlihat di semua bagian lainnya, karena hanya ada satu instance!
Output yang diharapkan:
Settings: Player1 | Difficulty: Normal | Sound: on
Settings: Hero | Difficulty: Hard | Sound: off
Same instance: trueCoba sendiri
import 'game_settings.dart';
void main() {
// TODO: Dapatkan instance settings dan beri nama settings1
// TODO: Panggil displaySettings() untuk menampilkan nilai bawaan
// TODO: Ubah pengaturan:
// - Ubah playerName menjadi "Hero"
// - Ubah difficulty menjadi "Hard"
// - Ubah soundEnabled menjadi false
// TODO: Dapatkan referensi lain ke settings dan beri nama settings2
// TODO: Panggil displaySettings() pada settings2 untuk membuktikan bahwa perubahan tersebut tercermin
// TODO: Cetak apakah settings1 dan settings2 identik
// Format: Same instance: [true/false]
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Objek
1Dasar-Dasar OOP
file Eksternallibrary dan ImporPengantar OOPClass dan ObjectKata kunci thismethodVariabel InstanceDasar-Dasar ConstructorRingkasan: Kalkulator Sederhana4Keamanan Null
Pengantar Keamanan NullBisa Null vs Tidak Bisa NullOperator ? dan !Kata Kunci late dan Keamanan NullOperator Penanganan NullKeamanan Null dalam classRangkuman: Sistem Profil Pengguna7class Abstrak & Antarmuka
class AbstrakMethod abstrakAntarmuka di DartAntarmuka ImplisitMengimplementasikan vs MemperluasBeberapa AntarmukaRingkasan: Kalkulator Bentuk10Koleksi dan Generik
Gambaran Umum list, set, dan MapKoleksi dengan Tipe AmanKelas GenerikMetode GenerikBatasan GenerikIterable dan IteratorUlasan: Penyimpanan Generik2Konstruktor dalam Dart
Konstruktor DefaultKonstruktor BernamaInitializer ListsKonstruktor KonstanKonstruktor FactoryKonstruktor RedirectingRangkuman, Pembuat Bentuk5Enkapsulasi
Member Publik vs PrivatKonvensi Prefiks _Privasi Tingkat libraryPendalaman Getter & SetterPenyembunyian InformasiRingkasan: Catatan Siswa8Mixin
Pengantar MixinMembuat MixinMenggunakan Beberapa MixinKata Kunci on pada MixinMixin vs. PewarisanMixin vs. InterfaceRangkuman: Sistem Hewan3Property Class
Anggota Instance vs StaticField Final dan ConstVariabel LateMethod dan Field StaticGetter dan SetterRangkuman: Pengelola Rekening Bank6Pewarisan
Pewarisan DasarKata Kunci superPenimpaan methodAnotasi @overrideKata Kunci class finalKonstruktor dan PewarisanRangkuman, Hierarki Karyawan9Polimorfisme
Dasar-Dasar PolimorfismePolimorfisme melalui AntarmukaPemeriksaan Tipe saat RuntimeOperator is & asKata Kunci KovarianRangkuman: Pemroses PembayaranLatihan sendiri: Compiler Dart online