Singleton Pattern

21
Singleton Pattern 1 one uno

description

Singleton Pattern. 1. uno. one. What is Singleton ?. One object of a kind Ada class yang hanya perlu diinstansiasi 1 kali saja Alasan : Dalam beberapa kasus hanya dibutuhkan 1 object saja. Like What ?. Database Connection. Dalam banyak kasus , koneksi database cukup satu saja - PowerPoint PPT Presentation

Transcript of Singleton Pattern

Page 1: Singleton Pattern

Singleton Pattern

1 oneuno

Page 2: Singleton Pattern

What is Singleton ?

• One object of a kind

• Ada class yang hanya perlu diinstansiasi 1 kali saja

• Alasan: Dalam beberapa kasus hanya dibutuhkan 1 object saja

Page 3: Singleton Pattern

Like What ?

• Database Connection

Dalam banyak kasus, koneksi database cukup satu saja

Misal : hanya 1 lisensi koneksi

Page 4: Singleton Pattern

Else ?• Application Setting (Preferences)

Beberapa bagian program yang berbeda akan membaca dan menulis setting

Page 5: Singleton Pattern

More ?• Logging activities

Beberapa bagian program perlu menulis ke file log yang sama

Page 6: Singleton Pattern

Singleton

• Memastikan suatu class hanya dapat “menghasilkan” satu object saja

• Konsepnya mirip global variable (dengan perbedaan)

• Pada Singleton, object hanya dibuat saat dibutuhkan, sedangkan Global Variable dibuat saat awal program dijalankan

Page 7: Singleton Pattern

public class Whatever {…

}

Bagaimana cara membuat object dari class Whatever ?

Whatever object1 = new Whatever();

Bisa membuat lebih dari 1 object ?

Whatever object1 = new Whatever();Whatever object2 = new Whatever();…Whatever object100 = new Whatever();

Public ! Bagaimana jika default ?

Page 8: Singleton Pattern

class Whatever {…

}Hanya dapat diakses dari package yang sama !

Tetap bisa dibuat lebih dari 1 object dari class Whatever

Whatever object1 = new Whatever();Whatever object2 = new Whatever();…Whatever object100 = new Whatever();

Object membutuhkan memory, semakin banyak object ?

Page 9: Singleton Pattern

Tahukah anda, kita dapat melakukan ini

public class Whatever {private Whatever() {}

}

Private Constructor !

Apa konsekuensinya ? Hubungannya dengan Singleton ?

Page 10: Singleton Pattern

Masih ingat konsep static method ?

public class Whatever {public static void hitung() {

…}

}

Whatever.hitung();

Method hitung() dapat dipanggil tanpa perlu melakukan instansiasi class Whatever

Page 11: Singleton Pattern

Bagaimana jika seperti ini ?

public class Whatever {public static Whatever getInstance() {

…}

}

Method tersebut mengembalikan object bertipe Whatever

Whatever object1 = Whatever.getInstance();

Page 12: Singleton Pattern

Kalau ini ?

public class Whatever {private Whatever() { }

public static Whatever getInstance() {return new Whatever();

}}

Memanggil static method getInstance() merupakan caraalternatif untuk instansiasi

Tapi masih bisa membuat lebih dari 1 object !!

Page 13: Singleton Pattern

public class Singleton {private static Singleton oneObject;private Singleton() { }//…public static Whatever getInstance() {

if(oneObject == null)oneObject = new Singleton();

return oneObject;}//….

}

Page 14: Singleton Pattern

Sudah cukup? TIDAK !!

public static Whatever getInstance() {if(oneObject == null)

oneObject = new Singleton();return oneObject;

}

Berpotensi “gagal” jika program kitaMultithreading !

Page 15: Singleton Pattern

Easy Fix !

public static synchronized Whatever getInstance() {if(oneObject == null)

oneObject = new Singleton();return oneObject;

}

Cara ini memiliki kelemahan karena synchronized membuat aplikasi anda menjadi lebih lambat !!

Page 16: Singleton Pattern

Beberapa Pilihan (Multithread)

• Tetap gunakan synchronized– Jika proses pembuatan object tidak membutuhkan

sumber daya yang besar (waktu dan memory)

• Buat instance sedini mungkin– Dijamin “aman” untuk multithread !

• Lakukan pengecekan “ganda” !

Page 17: Singleton Pattern

Buat instance sedini mungkin (Thread safe)public class Singleton { private static Singleton oneObject = new Singleton();

private Singleton() { }//…public static Whatever getInstance() {

return oneObject;}//….

}

Page 18: Singleton Pattern

public class Singleton {private volatile static Singleton oneObject;private Singleton() { }//…public static Whatever getInstance() {

if(oneObject == null)synchronized(Singleton.class) {

if(oneObject == null) { oneObject = new Singleton();}

}}//….

}Pengecekan ganda !

Page 19: Singleton Pattern

Class Diagram Singleton

Page 20: Singleton Pattern

ADA PERTANYAAN ?

KONSULTASIKAN KOMPONEN ANDA

SEGERA

Page 21: Singleton Pattern

NEXT : COMMAND PATTERN