Tutorial Design Pattern : Penerapan Design Pattern Prototype di PHP

Tumben saya begadang lagi, biasanya kemarin saya langsung tepar dari jam 7 malam sampe jam 7 pagi keesokan harinya. Sungguh-sungguh kualitas tidur yang sangat baik, sekaligus penurunan produktifitas kerja :p. Dan sampai bulan agustus mendatang, saya akan meningkatkan intensitas begadang seperti dulu lagi. Banyak tugas kampus, proyek’an, laporan penelitian dan sedikit persiapan untuk skripsi yang akan menghadang saya di semester depan (#haha). Sambil mengisi waktu begadang, saya sempatkan untuk posting kembali tentang tutorial design pattern. Yuppzzz, masih seputar design pattern karena materi ini merupakan tugas kuliah dari pak dosen. Kali ini saya akan membahas design pattern Prototype, yang secara kasarnya digunakan untuk menentukan jenis object dalam membuat object baru, yaitu dengan melakukan cloning. Dijamin deh, object yang di-clone mirip dengan object aslinya (yaw iyalah :p).

Dalam penerapannya, kita perlu mendeklarasikan sebuah abstract base class dimana di dalamnya menentukan pure virtual clone(). Kita juga membutuhkan sebuah constructor yang mengimplementasikan operasi clone(). Disini saya contohkan 3 buah object yang di-clone dan sebagai pembedanya saya sisipkan nilai yang akan bertambah ketika object yang terdaftar mengalami operasi clone. “Hehe…sudah mulai bingung kan…???”. Ayoookk kita langsung capcus ke contoh penerapannya aja.

class Cloning_Object
{
    public $object1;
    public $object2;
    public $object3;
    function __clone() {
        $this->object1 = clone $this->object1;
        $this->object2 = clone $this->object2;
    }
}

class Subs_Object
{
    static $instances = 0;
    public $instance;
    public function __construct() {
        $this->instance = ++self::$instances;
    }
    public function __clone() {
        $this->instance = ++self::$instances;
    }
}

Class di atas akan mendaftarkan object-object yang telah di-clone dan mengubah nilai instance yang terdapat di dalamnya. Sehingga dalam contoh ini object yang di-clone tidak benar-benar sama dengan object aslinya, karena nilai instance sudah dimodifikasi. Jika ingin membuat object hasil clone terlihat sama dengan object aslinya, silahkan mark/atau hapus cloning object yang terdapat di dalam function __clone() pada class Cloning_Object.

Cara penggunaanya seperti di bawah ini. Isi object ditampilkan dengan perintah print_r($object). Terlihat nilai instance yang berubah hanya pada object 1 dan object 2, sedangkan object 3 tetap. Karena object 3 hanya di-clone tanpa didaftarkan tanpa perubahan nilai instance.

$ob = new Cloning_Object();

$ob->object1 = new Subs_Object();
$ob->object2 = new Subs_Object();
$ob->object3 = new Subs_Object();

$ob2 = clone $ob;

print("Object Asli : <br>");
print_r($ob);

print("<br><br>Object Hasil Cloning'an: <br>");
print_r($ob2);

Prototype sangat menghemat memory, sama seperti prinsip Singleton dimana object hanya didedfinisikan sekali. Pada prototype, pendifinisian juga dilakukan sekali dan tinggal di-clone untuk mendapatkan object yang sama. OK deh, sekian dulu postingan di malam ini. Saya mau lanjut semedi dulu dengan desain pattern yang lain :D. Semoga saja tidak ketiduran dan semoga tutorial ini bermanfaat untuk rekan-rekan.

Happy Blogging and Keep Coding

Cheerrrss….!!!!

Leave a Reply

Your email address will not be published. Required fields are marked *