Skip navigation


Singleton adalah sebuah pattern yang membatasi penggunakan class menjadi sebuah instance saja pada sebuah aplikasi. Biasanya ada sebuah class pada aplikasi yang pada desain hanya dibutuhkan sekali. Pembatasan ini sebenarnya bisa dibuat sebagai sebuah global static object. Tapi kadang penggunaan singleton ini lebih menyenangkan karena global state sering membingungkan apalagi ketika kita memasukkan sebuah komponen yang menggunakan sebuah kelas yang dibatasi oleh sebuah obyek ke dalam aplikasi lain (namespacing).

Implementasi utamanya adalah sebagai berikut.

public class Singleton {
	private static Singleton ref;

	private Singleton();

	public Singleton getInstance(){
		if (ref == null)
		{
			ref = new Singleton();
		}
		return ref;
	}
}

Oke, sekarang saya punya sebuah contoh kasus. Saya memiliki sebuah aplikasi web jual/beli barang. Nantinya pada aplikasi ini setiap user mempunyai sebuah kumpulan barang dan pada aplikasi akan ada sebuah (dan hanya sebuah obyek) yang menampung barang-barang yang ada pada aplikasi.

Sebuah barang direpresentasikan dengan class Goodies.

public class Goodies {

    private int count;
    private String name;
    private int price;

    public Goodies(String name, int count, int price) {
        this.name = name;
        this.count = count;
        this.price = price;
    }

    public int getCount() {
        return count;
    }

    public void setCount(int count) {
        this.count = count;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getPrice() {
        return price;
    }

    public void setPrice(int price) {
        this.price = price;
    }
}

Setiap user akan mempunyai sebuah GoodiesContainer yakni sebuah class yang menampung segala barang. Kita sebut dengan cart.

public class GoodiesContainer {

    private LinkedList<Goodies> listgoodies;

    public GoodiesContainer() {
        listgoodies = new LinkedList<Goodies>();
    }

    public void addGoodies(Goodies g) {
        if (listgoodies.contains(g)) {
            Goodies e = listgoodies.get(listgoodies.indexOf(g));
            e.setCount(e.getCount() + g.getCount());
        } else {
            listgoodies.add(g);
        }
    }

    public int removeGoodies(Goodies g) {
        int i = 0;
        if (listgoodies.contains(g)) {
            Goodies e = listgoodies.get(listgoodies.indexOf(g));
            if (e.getCount() < g.getCount()) {
                i = g.getCount() - e.getCount();
                listgoodies.remove(e);
            } else {
                i = g.getCount();
                e.setCount(e.getCount() + g.getCount());
            }
        } else {
            i = 0;
        }
        return i;
    }

    public LinkedList<Goodies> getListGoodies() {
        return listgoodies;
    }
}
public class User {
    private String name;
    private GoodiesContainer cart;

    public User(String name) {
        this.name = name;
        this.cart = new GoodiesContainer();
    }

    public GoodiesContainer getCart() {
        return cart;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void addGoodies(Goodies goodies){
        this.cart.addGoodies(goodies);
    }
}

Pada dasarnya sebuah Warehouse hanyalah sebuah GoodiesContainer yang hanya memiliki sebuah instance. Dengan begitu kita dapat menggunakan Singleton.

public class Warehouse extends GoodiesContainer {

    private static Warehouse ref;

    private Warehouse() {}

    public static Warehouse getInstance() {
        if (ref == null) {
            ref = new Warehouse();
        }
        return ref;
    }
}

Kode ini hanya perubahan sedikit dari kode yang ada di sini.

One Trackback/Pingback

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

%d blogger menyukai ini: