Design Pattern
Pattern Gang of Four dengan konteks dunia nyata, contoh kode dalam Swift, Kotlin, TypeScript, Python & Java, serta kasus penggunaan praktis untuk setiap skenario.
Creational
Mengatur cara objek dibuatMemastikan sebuah class hanya punya satu instance dan menyediakan satu titik akses global ke instance tersebut.
Mendefinisikan interface untuk membuat objek, tetapi membiarkan subclass atau factory function menentukan class mana yang dibuat.
Membangun objek kompleks langkah demi langkah lewat fluent interface, memisahkan proses pembuatan dari representasinya.
Membuat objek baru dengan meng-clone instance yang sudah ada, bukan membangunnya dari nol.
Structural
Mengatur cara objek disusunMembungkus interface yang tidak kompatibel agar bisa bekerja dengan kode yang sudah ada tanpa perlu diubah.
Membungkus sebuah objek untuk menambahkan perilaku baru secara dinamis, tanpa subclassing.
Menyediakan interface sederhana untuk subsistem yang kompleks, sambil menyembunyikan detail di dalamnya.
Menyediakan pengganti (placeholder) yang mengontrol akses ke objek lain, untuk menambahkan lazy loading, caching, atau pengecekan akses.
Menyusun objek menjadi struktur tree dan membuat client bisa memperlakukan objek tunggal maupun gabungannya dengan cara yang sama.
Behavioral
Mengatur cara objek berkomunikasiMendefinisikan ketergantungan one-to-many sehingga saat state satu objek berubah, semua objek yang bergantung padanya otomatis diberi tahu.
Mendefinisikan sekumpulan algoritma yang bisa saling dipertukarkan dan memungkinkan penggantiannya saat runtime.
Membungkus sebuah request sebagai objek, sehingga operasi bisa di-undo/redo, dimasukkan ke antrean, dan dicatat.
Memungkinkan sebuah objek mengubah perilakunya saat state internalnya berubah, seolah-olah class-nya ikut berubah.
Meneruskan request melalui rantai handler; setiap handler memutuskan apakah akan menanganinya atau meneruskannya.
Mendefinisikan kerangka algoritma di base class, sementara langkah-langkah tertentu diserahkan ke subclass.
Menyediakan cara untuk mengakses elemen koleksi secara berurutan tanpa membuka representasi internalnya.