Sebelum membahas pattern yang lain, saya ingin mem-post-kan dulu, sebenarnya apa sih yang dimaksud dengan design pattern? Saya memperoleh penjelasan yang bagus di buku Head First Design Pattern.
Cerita tentang design pattern dimulai dari kutipan percakapan berikut.
Di sebuah restoran fast-food:
Anto: Aku mau pesan 2 ayam, 1 nasi putih, 1 french fries, 1 coca-cola. Terus pesan 1 burger, 1 french fries, 1 coca-cola. Pesan juga spaghetti, 1 french fries, 1 coca-cola. Aku juga pesan 1 coca-cola yang diberi es krim di atasnya.
Joni (customer di samping Anto): 1 paket A, 1 paket B, 1 paket C, dan 1 cokefloat.
Kedua pesanan tersebut sama. Namun, Anto membutuhkan kata-kata yang lebih banyak daripada Joni untuk menyampaikan pesanannya. Dan lagi, penerima order harus mengingat lebih banyak.
Kenapa bisa begini? Joni dan penerima order memiliki kosakata dari pesanan-pesanan yang ada di restoran tersebut. Mereka sama-sama sudah mempunyai shared vocabulary. Hal ini membuat komunikasi menjadi lebih lancar. Penerima order tidak perlu banyak mengingat karena sudah mempunyai pattern pesanan di kepalanya.
Hubungannya dengan design pattern? Analogi di atas juga berlaku pada design pattern. Design pattern memberikan kita shared vocabulary dengan developer lain. Dengan memiliki vocabulary ini, kita lebih mudah berkomunikasi dan juga menginspirasi bagi yang belum tahu untuk mempelajarinya. Kita bisa berpikir tentang arsitektur di tingkatan pattern, dan bukan di tingkatan objek yang terlalu detil.
So, bagaimana kita menggunakan design pattern? Kita sudah biasa menggunakan library dan framework, right?! Kita biasa menulis kode dengan menggunakan API dan mengikutsertakannya di program kita. Ambil contoh, Java API memberikan segala fungsionalitas dari GUI, IO, sampai network. Kita bisa memilih komponen-komponen dan memasukkannya ke aplikasi kita. Tetapi, semuanya tidak membantu menstrukturkan aplikasi kita supaya lebih mudah dibaca, lebih mudah di-maintain, dan lebih fleksibel.
….Oleh karena itu, design pattern ada. Design pattern tidak langsung muncul di kode, tetapi ada di otak kita terlebih dahulu. Setelah otak kita ter-load oleh pengetahuan tentang pattern, kita dapat mengaplikasikannya di desain baru atau merevisi kode menjadi kode yang fleksibel.
So, design patterns are so great. Cool!
Anto: Gw udah bikin kelas broadcast. Kelas ini mendaftar semua objek-objek yang mendengarkannya. Tiap kali ada data baru, kelas ini akan ngirimin pesan ke masing-masing listener. Nah, bagian yang paling keren noh, listener bisa join ke broadcast setiap saat dan juga bisa out dengan sendirinya. Keren kan. Sistem ini dinamik banget dan loosely-coupled.
Joni: Tok, kenapa Lu nggak bilang aja, Lu gunain Observer Pattern?!!!!!