Wzorzec projektowy singleton

Co to jest wzorzec projektowy? (i czemu nie trzeba się bać programując w Kotlinie)

Projektowanie oprogramowania to bardzo ważna rzecz. Tak samo przy budowie domu, budowniczy patrzą na plany i dzięki temu budują i współpracują ze sobą. Tak samo w programowaniu powinniśmy stworzyć sobie plan, wstępny szkic jak nasz program będzie działał. Profesjonalnie zajmują się tym architekci oprogramowania. A rzemieślnicy (programiści) budują software na podstawie planów. W wytwarzaniu oprogramowania powstało wiele wzorców które, ułatwiają pracę. Dziś przybliżę czym jest singleton. Chyba najprostszy wzorzec.

Singleton – kreacyjny wzorzec projektowy, którego celem jest ograniczenie możliwości tworzenia obiektów danej klasy do jednej instancji oraz zapewnienie globalnego dostępu do stworzonego obiektu.

 

Jak wygląda “naiwna” implementacja w Javie?

public class Singleton{

private static Singleton INSTANCE;

private Singleton(){}

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

private final String ring = "One to rule them all"

public String getRing() {
return ring;
}

}

Dla lepszego zrozumienia stworzyłem w środku prywatną stałą typu String o nazwie “ring”, która wskazuje na napis: “One to rule them all”. Około 20 linijek kodu do napisania a to tylko implementacja naiwna. Dzisiejsze aplikacje są wielowątkowe, skalowalne. Zachodzi potrzeba synchronizacji. Dobrze wiedzieć jak tworzy się singletony, dla pełnego zrozumienia. Lecz dla świata IT oszczędność czasu programisty to znaczna oszczędność pieniędzy i skupienie się na rzeczach najważniejszych. Jak więc wywołać coś takiego w mainie:

public static void main(String args[]) {
Singleton one = Singleton.getInstance();
System.out.println(one.getRing());
}

Co wywoła napis:

One to rule them all

Czas na Kotlin

Ten sam kod. Kod bezpieczny dla wielowątkowego środowiska! Oraz dodałem getter i setter dla pola description tylko po to, żeby pokazać jak Kotlin ułatwia pisanie prostych funkcji. Typ zwracany jest “analizowany” przez kompilator.

object ring {
private var description = "One to rule them all"

fun setDesc(desc:String) {
description = desc
}

fun getDesc() = description
}

Tworząc object – tworzymy singletona. O klasach porozmawiamy w kursie programowania w Kotlinie. Na razie staram się przekonać, o potencjale i oszczędności czasu w tym języku.
Co ciekawego jeszcze można zauważyć? Brak średników, nie zawsze trzeba podawać typ zwracanej wartości można nawet ominąć słowo return.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *