Merhaba Değerli Java dostları. Tasarım kalıpları üzerine olan yazı dizime Singleton tasarım kalıbı ile devam ediyorum. Hemen Singleton üzerine kısaca bilgi vermek istiyorum. Singleton ile amacımız uygulama boyunca bir sınıftan sadece bir örnek(instance) oluşturup onu kullanmaktır. Böylece o sınıftan ikinci bir örnek oluşturmaya gerek kalmadan bütün bilgileri ortak bir havuzda toplamış oluruz. Aslında amacı hakkında bir önceki cümlede önemli bir ipucu geçti. Ortak bir havuz. Evet, eğer bilgilerimiz ortak bir alanda toplayıp her yerde kullanmak istiyorsak tam bize göre bir kalıp bu. Gülün dikeni olduğu gibi Singleton kalıbının olumsuz yanı da test güdümlü çalışmalarda static method ve alanlardan dolayı zorluk çıkarmasıdır. Hemen örneğimize geçelim.

package com.farukbozan.patterns.singleton;
public class Car {private String carName;
private int motorCapacity;public Car(String carName, int motorCapacity) {
this.carName = carName;
this.motorCapacity = motorCapacity;
}public String getCarName() {
return carName;
}public int getMotorCapacity() {
return motorCapacity;
}
}

Şimdi asıl işi yapacak olan Singleton sınıfımıza bakalım.

package com.farukbozan.patterns.singleton;
import java.util.ArrayList;
import java.util.Iterator;public class CarSingleton {private static CarSingleton instance = null;
private ArrayList garage;private CarSingleton() {
garage = new ArrayList<>();
}public static CarSingleton instance() {
if (instance == null) {
instance = new CarSingleton();
}
return instance;
}

public void showGarageInfo() {
System.out.println(“CARSINGLETON\t: ” + instance.toString());
System.out.println(“GARAGE SIZE\t: ” + garage.size());
Iterator iterator = garage.iterator();
while (iterator.hasNext()) {
Car car = iterator.next();
System.out.println(“CAR INFO\t: ” + car.getCarName() + “\t” + car.getMotorCapacity());
}
System.out.println(“”);
}

public void addCarToGarage(Car car) {
garage.add(car);
}

public void removeCarFromGarage(Car car) {
garage.remove(car);
}
}

Adım adım sınıfımızı inceleyelim. İki alandan ilki static olarak tanımlandı; çünkü uygulama boyunca aynı alanı kullanmamız gerekecek. Static alanlardan sadece bir tane oluşturulduğunu hatırlatarak, bir de garajımızı tanımlıyoruz. Yapılandırıcımızı(constructor) ise private tanımlayarak new ile yeni bir örnek oluşturmayı engellemiş oluyoruz. Daha sonra static olarak tanımladığımız ve yüz göz olacağımız 😀 metodu tanımlıyoruz. İş mantığını oluşturan metotlar ise public ve static olmayacak şekilde tanımlanarak tekil örneğin metotları gibi davranacaktır. Son olarak da main sınıfına göz atalım.

package com.farukbozan.patterns.singleton;
public class SingletonMain {public static void main(String[] args) {Car carA = new Car(“Car A”, 1300);Car carB = new Car(“Car B”, 2000);
Car carC = new Car(“Car C”, 1600);CarSingleton.instance().addCarToGarage(carA);
CarSingleton.instance().showGarageInfo();CarSingleton.instance().addCarToGarage(carB);
CarSingleton.instance().showGarageInfo();

CarSingleton.instance().addCarToGarage(carC);
CarSingleton.instance().showGarageInfo();

CarSingleton.instance().removeCarFromGarage(carA);
CarSingleton.instance().showGarageInfo();

CarSingleton.instance().removeCarFromGarage(carC);
CarSingleton.instance().showGarageInfo();

CarSingleton.instance().removeCarFromGarage(carB);
CarSingleton.instance().showGarageInfo();

}
}

Böylece Singleton tasarım kalıbının işleyişine de göz atmış olduk.

bol Java’ lı günler dileğiyle…

One response

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.