Istilah design patterns
dimulai di bidang perancangan bangunan oleh Christopher Alexander. Dalam
bukunya A Pattern Language [Alex77], ia menerangkan pola-pola yang terdapat di
dalam berbagai rancangan arsitektur bangunan. Arti design pattern
diterangkannya dalam kalimat berikut:
Design
patterns adalah unsur-unsur rancangan yang seringkali muncul pada berbagai
sistem yang berbeda. Setiap kemunculan ini menguji pattern tersebut di berbagai
situasi. Ada juga yang mengartikan istilah design pattern sebagai sebuah solusi
untuk mengulang masalah design. Solusi ini telah dikembangkan, dicompile, dan
disaring oleh programmer yang sebelumnya telah menghadapi masalah ini. Design
pattern pada dasarnya merupakan petunjuk atau langkah-langkah dalam
menyelesaikan solusi, mirip seperti halnya dengan algoritma. Sebagai contoh :
jika kita ingin melakukan sebuah operasi pencarian pada sebuah daftar bilangan,
kita tidak perlu menyelesaikan dengan solusi kita sendiri, terdapat beberapa
algoritma yang menyediakan fungsi searching ini seperti binary tree
searching.
Perbedaan antara design pattern dan algoritma
adalah algoritma fokus pada implementasi solusi. Sebuah algoritma
biasanya me-list dari atas ke bawah menuju ke tahap akhir dengan statement yang
terurut untuk menghasilkan sebuah solusi. Sedangkan design pattern
menginformasikan kepada developer apa yang harus dilakukan, bukan bagaimana cara
melakukannya.
Dalam dunia programmasi, berbagai jenis
problem identik yang sering dijumpai telah dikenal, di identifikasi dan lebih
penting lagi telah di ditemukan pemecahannya. GOF atau Gang Of Four sebuah
study group yang terdiri dari para praktisi informatika : Erich Gamma, Richard
Helm, Ralph Johnson dan John Vlissides mengumpulkan problem-problem tersebut
beserta metoda pemecahannya. Dengan mengkhususkan dalam hal pemograman
berorientasi objek (OO), mereka membuat sebuah buku berjudul "Design Patterns: Elements of Reusable
Object-Oriented Software" yang berisi solusi-solusi beserta
penjelasannya. Kemudian dalam perkembangan selanjutnya solusi umum tersebut
dikenal dengan nama Design Pattern.
Design Pattern ini merupakan
pattern yang paling sederhana di antara pattern-pattern yang lain. Hanya
membutuhkan satu kelas pada class diagram.
Design Pattern dalam perkembangannya mendapat
antusiasme yang cukup besar oleh para praktisi programmasi. Karena design
pattern sangat membantu dalam menghasilkan kode yang berkualitas, mudah di jaga
dan mudah dikembangkan.
Untuk
menguasai sebuah design pattern tertentu anda tidak perlu menghapal (baik
diagram UML, maupun definisi formalnya). Tapi anda harus mengerti apa yang
menjadi dasar penggunaannya, mengenali problemasi-problemasi apakah yang cocok
dengan design pattern tersebut. Sebelum masuk dan terintegrasi dalam kode anda.
Terlebih dahulu prinsip design pattern harus masuk dan terintegrasi di dalam
otak anda.
Metoda
pembelajaran yang di rencanakan adalah :
- Definisi formal dari sebuah design pattern
- Studi kasus penggunaan design pattern
- Contoh dalam bentuk kode java
- Pengembangan design pattern
- Berdiskusi di forum yang disediakan disetiap artikel
- Mengulang sendiri.
private Singleton()
{
}
|
Definisi
design pattern :
Singleton Pattern memastikan
suatu kelas hanya terdapat satu instance dan kelas tersebut menyediakan akses
ke instance itu.
Studi Kasus design pattern :
Ada banyak situasi
dimana kita hanya membutuhkan satu objek. Misalnya, objek yang berfungsi
sebagai driver dari suatu device seperti printer. Apa jadinya bila lebih dari
satu? Pernah lihat pesan yang menampilkan drivers conflict. Yeah, sort of it.
Faktanya, banyak lagi tipe objek yang jika
di-instance-kan lebih dari satu menyebabkan terjadinya masalah seperti
penggunaan resource yang tidak normal, behavior program yang tidak benar, dan
hasil yang tidak konsisten.
Contoh
dalam bentuk kode :
public class Singleton {
private
static Singleton myInstance;
//
atribut yang lain
private
Singleton() {
}
public
static Singleton getInstance() {
if
(myInstance == null) {
myInstance
= new Singleton();
}
return
myInstance;
}
//
method yang lain
}
Penjelasan
code :
Sekarang, pertanyaannya, apa artinya kode di atas?
Kenapa kode tersebut bisa memunculkan efek Singleton?
Dimulai dengan constructor berikut:
private constructor ?
Di Java, kita buat objek baru minimal dengan menuliskan statement new
SomeObject(). Nah, tanda kurung di belakang SomeObject menyatakan: sebelum membuat objek baru,
kita panggil constructor-nya.
Bagaimana kalau kelas kita tidak punya
constructor ?
See, I don’t have a constructor, so I don’t need to invoke constructor. Meskipun kelas kita tidak mempunyai constructor, JVM menambahkan
default-nya untuk kita:
public SomeObject() {
}
Jadi, kelas kita pasti ada constructor-nya, biarpun kita
tidak menuliskannya secara eksplisit.
Sekarang, apa artinya
modifier private pada constructor ?
Memang tidak seperti constructor kebanyakan yang menggunakan
public. Private di sini berarti hanya kode yang sekelas dengan constructor yang
dapat mengakses constructor ini. Tidak ada yang bisa mengaksesnya di luar
kelas. Dengan kata lain, tidak ada yang bisa mengeksekusi statement “new” di
luar kelas, karena kita tidak bisa mengakses constructor-nya.
Jadi, kelas Singleton di atas tidak bisa di-instance-kan ?
Bisa, asal di-instance-kan di dalam kelas
Singleton.
Sekarang, kita telusuri lagi kelas Singleton,
dan menemukan snippet kode seperti ini:
public static Singleton getInstance() {
if (myInstance == null) {
myInstance
= new Singleton();
}
return myInstance;
}
Method getInstance() di atas bertipe static. Dengan
bertipe static menjadikan method tersebut hanya terdapat satu saja di antara
instance-instance. Karena static method hidup di kelas, dan bukan di
instance-instance. Berbeda dengan constructor yang private, method ini bersifat
public sehingga bisa dipanggil di luar kelas Singleton. Dan karena bertipe
static, method tersebut kita panggil dengan mengkualifikasikan nama kelas dan
nama method seperti ini:
Singleton.getInstance()
Method getInstance()
menyediakan cara bagi kita untuk meng-instance-kan kelas Singleton dan
mengembalikan instance tersebut.
Jika myInstance
null, artinya kita belum membuat instance. Kemudian, kita meng-instance-kan
Singleton melalui private constructor-nya dan meng-assign instance ini ke
myInstance. Ini bisa dilakukan karena kita meng-instance-kan di dalam kelas
Singleton. Atribut myInstance ini bertipe static juga, karena instance kita
merupakan satu-satunya instance kelas Singleton.
Jika myInstance
tidak null, artinya kita sudah mempunyai instance, dan instance tersebut yang
akan dikembalikan ke kita.
Jadi, kita masih bisa membuat instance
dari kelas Singleton. Tapi, hanya satu. Tidak lebih! Karena itulah yang kita harapkan dari Singleton pattern ini.