โ Kembali ke Design Pattern
๐งฌ
Creational
Prototype
Membuat objek baru dengan meng-clone instance yang sudah ada, bukan membangunnya dari nol.
Masalahnya
Membuat objek baru itu mahal atau rumit. Kamu butuh salinan yang awalnya persis sama dengan objek yang sudah ada, hanya dengan sedikit perbedaan.
Cara Kerja
- โบCloning sering lebih cepat dibanding membangun dari nol
- โบDeep copy menduplikasi objek bersarang, sedangkan shallow copy memakainya bersama; pahami perbedaannya
- โบClone mempertahankan state internal yang mungkin sulit dibangun ulang dari luar
- โบClient tidak perlu tahu class konkret dari objek tersebut
- โบBerguna untuk membuat objek "template" dengan nilai default yang sudah diatur
Kapan Digunakan
โPembuatan objek mahal dan objek serupa sudah tersedia
โObjek konfigurasi atau template yang dipakai sebagai titik awal dengan sedikit variasi
โSaat kamu perlu menyalin objek tanpa bergantung pada class konkretnya
โUndo/redo: simpan snapshot state dengan meng-clone sebelum diubah
Contoh di Dunia Nyata
๐
iOS
NSCopying / NSMutableCopying, UIImage copy, deep copy via NSKeyedArchiver
๐ค
Android
Kotlin data class .copy(), Parcelable, Bundle.clone()
๐
Web
structuredClone(), spread { ...obj }, Object.assign({}, obj)
Contoh Kode
Swift
final class Theme: NSCopying {
var primaryColor: String
var font: String
var isDark: Bool
init(color: String, font: String, dark: Bool) {
primaryColor = color; self.font = font; isDark = dark
}
func copy(with zone: NSZone? = nil) -> Any {
Theme(color: primaryColor, font: font, dark: isDark)
}
}
let light = Theme(color: "#FF4D1C", font: "SF Pro", dark: false)
let dark = light.copy() as! Theme
dark.isDark = true
dark.primaryColor = "#FF6B47"
print(light.isDark) // false โ original unchanged
print(dark.isDark) // true