Singleton Pattern

  • View
    26

  • Download
    0

Embed Size (px)

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

PowerPoint Presentation

Singleton Pattern1oneunoWhat is Singleton ?One object of a kind

Ada class yang hanya perlu diinstansiasi 1 kali saja

Alasan: Dalam beberapa kasus hanya dibutuhkan 1 object sajaLike What ?Database Connection

Dalam banyak kasus, koneksi database cukup satu saja

Misal : hanya 1 lisensi koneksiElse ?Application Setting (Preferences)

Beberapa bagian program yang berbeda akan membaca dan menulis settingMore ?Logging activities

Beberapa bagian program perlu menulis ke file log yang samaSingletonMemastikan 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 dijalankanpublic 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 ?class Whatever {}

Hanya dapat diakses dari package yang sama !Tetap bisa dibuat lebih dari 1 object dari class WhateverWhatever object1 = new Whatever();Whatever object2 = new Whatever();Whatever object100 = new Whatever();Object membutuhkan memory, semakin banyak object ?Tahukah anda, kita dapat melakukan ini public class Whatever {private Whatever() {}}

Private Constructor !Apa konsekuensinya ? Hubungannya dengan Singleton ?Masih ingat konsep static method ?public class Whatever {public static void hitung() {}}

Whatever.hitung();Method hitung() dapat dipanggil tanpa perlu melakukan instansiasi class WhateverBagaimana jika seperti ini ?public class Whatever {public static Whatever getInstance() {}}

Method tersebut mengembalikan object bertipe WhateverWhatever object1 = Whatever.getInstance();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 !!public class Singleton {private static Singleton oneObject;private Singleton() { }//public static Whatever getInstance() {if(oneObject == null)oneObject = new Singleton();return oneObject;}//.}

Sudah cukup? TIDAK !!public static Whatever getInstance() {if(oneObject == null)oneObject = new Singleton();return oneObject;}

Berpotensi gagal jika program kitaMultithreading !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 !!Beberapa Pilihan (Multithread)Tetap gunakan synchronizedJika proses pembuatan object tidak membutuhkan sumber daya yang besar (waktu dan memory)

Buat instance sedini mungkinDijamin aman untuk multithread !

Lakukan pengecekan ganda !Buat instance sedini mungkin (Thread safe)public class Singleton { private static Singleton oneObject = new Singleton();private Singleton() { }//public static Whatever getInstance() {return oneObject;}//.}

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 !Class Diagram Singleton

Ada pertanyaan ?

Konsultasikan komponen anda SEGERA Next : command pattern