Open/Close Principle’ı Sağlayan Factory Pattern’i Oluşturma

Şuradaki Örneği değiştirerek adam haline getireceğiz:

https://alvinalexander.com/java/java-factory-pattern-example

Tabiki biz kendi Sokak köpeği ekledik ve bazı köpekleri çıkarttık. Şöyleki blogda yazılan kod open/close principle’ı sağlamamaktadır. Yeni tür bir köpek eklemek için illaki Factory Metodunda değişiklik (modification) yapılması gerekmektedir Open Closed priciple neydi? “No Modification but Extension “ diye kısaca ifade edilebilir. Yani Varolan kodu değiştirme ekler yaparak geliştir demek istemektedir. Open Close Principle’ı sağlamayan koddan da örnek verecek olursak:

class DogFactory 
{
static Dog getDog(String cins)
{
if(cins.equals("Doberman"))
{ return new Doberman();
} else if(cins.equals("Sokak"))
{ return new SokakKopegi();
}
return null;
}
}

Görüldüğü üzere yeni bir köpek eklemek için 1 if condition daha yazmamız gerekmektedir.

Peki bu durumdan nasıl kurtulacağız. Cins tanımlayıcımızı getDog metodundan önce tanımlayarak elbette. Yani ifleri bir şekilde atmanın yolunu bularak onu da şu şekilde yapabiliriz:

interface CinsInfo 
{ public Dog cins();
}
class Sokak implements CinsInfo
{
@Override
public Dog cins()
{
return new SokakKopegi();
}
} class Dober implements CinsInfo
{ @Override
public Dog cins()
{ return new Doberman();
} }

Son olarak Factory Metodumuzu da yazarsak:

class DogFactory2
{
static Dog getDog(CinsInfo cinsInfo)
{ return cinsInfo.cins();
}

Böylece open/close principlelı kolayca sağlayabiliriz artık yani köpek eklemek için sadece 1 kopek classı ve 1 cinsİnfo classı eklenmesi ile yeni bir köpek türü eklenebilmektedir. Şöyleki:

class YeniKopek implement Dog 
{ ////..... }
class Yeniko implement CinsInfo
{ @Override
public Dog cins()
{ return new YeniKopek();
}
}

Originally published at http://anilkaynr.wordpress.com on October 1, 2019.

Computer Engineer,Sociologist, CSE Master Student

Computer Engineer,Sociologist, CSE Master Student