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.