Singleton Pattern [Design Pattern Series]


Singleton Pattern adalah sebuah creational pattern yang menyatakan bahwa dalam sebuah aplikasi hanya boleh terdapat satu instance dari sebuah class. Terkadang muncul pikiran mengapa hanya ada satu instance yang diperbolehkan ? atau mengapa tidak menggunakan global variable saja (kalau anda yang terbiasa menggunakan pascal, dan basic serta bahasa turunan mereka pasti mengenal yang namanya global variable) ?

Class-class seperti database connection pool, Logging hanya diperlukan sebuah saja instance dari masing-masing class untuk digunakan pada aplikasi. Class-class yang tipenya serupa dengan keduanya hanya diperlukan sebuah saja.

Penggunaan global variable sekilas memang bisa digunakan untuk mengatasi permasalahan satu instance untuk aplikasi jika aplikasi yang dibangun tidak besar dan tidak melibatkan banyak code designer. Jika aplikasi yang dibangun berskala besar dan melibatkan banyak orang tentu akan menyulitkan jika menggunakan global variable karena belum tentu aman dan bisa disetujui oleh banyak orang serta siapa yang berhak untuk melakukan inisialisasi object.

Singleton pattern mengatasi semua masalah ini, singleton pattern bisa memastikan bahwa hanya terdapat satu instance yang dibuat sehingga dapat dipastikan bahwa tidak akan ada lebih dari sebuah instance dalam aplikasi. Contoh implementasinya dalam C# adalah sebagai berikut:


///
/// Singleton class in C#
///
public class Singleton
{
	///
	/// only a single instance of Singleton is allowed
	/// so we make it as static;
	///
	private static Singleton instance=null;

///
	/// class constructor make it private access from others
	///
	private Singleton()
	{
	}

///
	/// get the instance of class
	/// the only one instance
	///
	public static Singleton Instance()
	{
	        if(null==instance)
		    instance = new Singleton();
		return instance;
	}
}

Yang terpenting dari class diatas adalah variable instance yang bertipe static dan dan constructor dibuat private sehingga class tersebut hanya bisa di inisialisasi oleh dirinya sendiri, serta dibuat class method instance() yang digunakan untuk mendapatkan instance dari class. Contoh class client yang menggunakan singleton class adalah sebagai berikut:


class Client
{
	///
	/// The main entry point for the application.
	///
	[STAThread]
	static void Main(string[] args)
	{
		Singleton s = Singleton.Instance();
		Singleton sx = Singleton.Instance();
		if(s.Equals(sx))
			Console.WriteLine("they are equals");
		else
			Console.WriteLine("they are not equals");

}
}

Output yang ditampikan oleh class client menunjukan bahwa kedua variable tersebut adalah variable yang sama

Output Singleton

Ruby

Implementasi singleton di ruby sangat mudah. kita tinggal menambahkan module singleton di code. Secara default setiap class dalam ruby memiliki method new yang berfungsi untuk membuat instance dari class tersebut dengan modifier public, sehingga untuk membuat method new menjadi private perlu ditambahkan class Singleton pada class tersebut (dengan menambahkan bari program "include Singleton". contohnya adalah sebagai berikut:


require 'singleton' #singleton class always require module 'singleton

class TheClass
   include Singleton #make the class as Singleton
end

Untuk menggunakan class tersebut dilakukan dengan cara:


x = TheClass.instance # bukan x = TheClass.new
y = TheClass.instance
puts "x object = " + x.to_s
puts "x object = " + y.to_s

Output yang dihasilkan menunjukan bahwa kedua object x dan y sama.

output singleton dalam ruby 

One thought on “Singleton Pattern [Design Pattern Series]

  1. wah menarik sekali bahasa Ruby🙂
    require Singleton apakah menunjukan secara declarativ bahwa class tersebut merupakan singleton?
    dan menariknya mengenal .instance

    karena di C# masih memungkinkan orang melakukan new instance dari constuctornya.

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s