โ† 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