19 Ocak 2015 Pazartesi

Java Singleton Örnekleri

Lazy Singleton Örnekleri
1. Enum
Bu yöntemde enum şeklinde bir sınıf kullanılıyor. Java 1.5'ten sonra bu yöntemin kullanılması tavsiye ediliyor. Enum olduğu için sınıf otomatik olarak Serializable da oluyor. Bu yöntemin JVM'in kendi içinde kullandığı bir kilit ile bu nesneyi yarattığı dolayısıyla thread-safe olduğu belirtilmiş. Joshua Bloch şöyle yazıyor.

you get an ironclad guarantee that there can be no instances besides the declared constants. The JVM makes this guarantee, and you can depend on it.

Örnek:
public enum UserActivity {
    INSTANCE;

    public void dostuff() {
     ...
    }
}

// use it as ...
UserActivity.INSTANCE.doStuff();

2 - ClassLoader ile beraber private static final field
Bu yöntem Java 1.5'ten önce kullanılıyor. Final bir sınıf ve içinde private static final bir nesne yaratılıyor. private static final olduğu için JVM nesneyi lazy ve thread-safe olarak yaratır. Serialization
public final class Foo implements Serializable {

    private static final long serialVersionUID = 1L;

    private static class FooLoader {
        private static final Foo INSTANCE = new Foo();
    }

    private Foo() {
        if (FooLoader.INSTANCE != null) {
            throw new IllegalStateException("Already instantiated");
        }
    }

    public static Foo getInstance() {
        return FooLoader.INSTANCE;
    }

    @SuppressWarnings("unused")
    private Foo readResolve() {
        return FooLoader.INSTANCE;
    }
}








Hiç yorum yok:

Yorum Gönder