TASARIM ÖRÜNTÜLERİ
Factory Method
Creational Patterns bir örneği olan Factory Method bize tek bir arayüzden(interface) türetilmiş sınıfların üretilmesi işlemini soyutlayan bir örüntüdür.
Bilgi Notu: Diğer tüm Tasarım Örüntüleri yazıma bu linkten ulaşabilirsiniz.
Hangi Durumda
Bir arayüzden türemiş farklı farklı nesnelerimiz/bileşenlerimiz olduğunu düşünelim. Bu sınıflara ihtiyacımız olduğu yerlerde new ile oluşturduğumuz durumda tüm Concrete sınıfların kullanımı tüm sınıflara dağılmış olması istenilen bir yöntem değildir. Yeni nesne oluşturma ve bunun nesnenin yönetimi olabildiğince kontrollü bir şekilde yapılması geliştirilen uygulamalar için faydalı olacaktır.
Bir örnek üzerinden gidersek;
Shape: Şekil interface arayüzü sadece draw metodu bulunuyor. Bundan türeyen
- Circle, Square Rectangle ….. şeklinde uzunca bir liste olsun.
Burda bu Shape türlerini kullanacak Client sınıflar. Arka planda Concrete nesneleri bilip bunları oluşturmak ile uğraşmak yerine type vb bilgileri verip bu sınıf oluşturma sorumluluğunu başka bir sınıfa bırakması oldukça faydalı olacaktır. Bu durumda
ShapeFactory : Shape oluşturulmasından sorumlu sınıf type hangi concrete sınıfları üreteceğini bilmesini. Bu üretim mantığını tek bir sınıf içerisinde tutup, bir geliştirme ve eklenme yapılacağı zaman sadece bu sınıfta değişiklik olması sağlanır.
Type bilgisinin String olması durumunda bir array içerisindeki [circle, square, …..] bilgileri dinamik oluşturmasını
İstemci sınıfta Concrete sınıflara import bağlantının olmamasını sağlar.
ShapeFactory sınıfının görevi şekil oluşturma işlemini soyutlamak. Aldığı parametreye göre bir şekil oluşturuyor. Yarın sisteme yeni bir şekil eklemek istediğimizde değiştireceğimiz kısım sadece ShapeFactory içerisindeki bu method olmuş olacak. getShape metodu new metodunu soyutlamış olduk.
Şimdi bu Methodu dışarıdan bir istemcinin nasıl kullandığına bakalım. Öncelikle bir ShapeFactory oluşturuyor. Burdan istediği tipteki şekli ShapeFactory istiyor ve sadece draw metodunu çağırıyor.
Okumaya Devam Et 😃
Bu yazının devamı veya yazı grubundaki diğer yazılara erişmek için bu linke tıklayabilirsiniz.