Bir sınıfta nesne oluşturma işlemini alt sınıflara devrederek, üst sınıfın oluşturulacak nesnenin tam olarak hangi sınıfa ait olduğunu bilmeden çalışmasını sağlar. Yani nesne üretimi için kullanılan sınıfı soyutlayarak esneklik ve genişletilebilirlik sağlar. Aşağıdaki kod örneği bu tasarım kalıbını gösteren java implementasyonudur.
Araba adında bir arayüz oluşturalım ve tüm araba türleri için ortak olacak olan bir sur() metodunu bu arayüze ekleyelim.
Şimdi de oluşturduğumuz Araba arayüzünü uygulayacak olan Sedan ve SUV sınıflarını yazalım. Bu sınıflar sur() metodunu kendi özelliklerine göre dolduruyor olacaklar.
ArabaFabrikasi adında soyut bir sınıf tanımlayalım. arabaOlustur() metodu burada soyut olarak bırakılacak. Bu metot alt sınıflar tarafından uygulancak.
ArabaFabrikasi sınıfını genişleten (extend) SedanFabrikasi ve SUVFabrikasi adında iki adet sınıf oluşturalım. Bu sınıflar arabaOlustur() metodunu kendilerine göre uygulayacaklar.
SedanFabrikasi sedan nesnesi oluştururken SUVFabrikasi SUV nesnesi üretecek.
Bu yapı, istemcinin (main metodunu içeren sınıf) direkt olarak new Sedan() veya new SUV() çağırmasını engeller. Bunun yerine, istemci hangi fabrika sınıfını çağıracağına karar verir ve arabaOlustur() metoduyla nesne üretir. Bu, bağımlılıkları azaltır ve kodun esnekliğini artırır. özetleyecek olursak
Bu yapı, özellikle nesne türlerinin değişken olduğu durumlarda kullanılır. Örneğin, farklı araba türlerini oluşturacak bir sistemde, yeni bir araba türü eklendiğinde mevcut kodun değiştirilmesine gerek kalmaz.
Abstract Factory, ilgili nesneleri oluşturmak için bir arayüz sağlayarak aynı ürün ailesine ait nesnelerin birlikte oluşturulmasını ve kullanılmasını sağlar. Bu desen, ürünlerin birbiriyle uyumlu olmasını garanti eder.. Aşağıdaki kod örneği bu tasarım kalıbını gösteren java implementasyonudur.
İlk olarak, Button adında bir arayüz tanımlanmıştır. Bu arayüz, her düğme türünün uygulamak zorunda olduğu paint() metodunu içerir. Daha sonra, bu arayüzü uygulayan iki farklı sınıf (WindowsButton ve MacOSButton) tanımlanmıştır. Bu sınıflar, düğmenin hangi işletim sistemine ait olduğunu belirtir.
Checkbox arayüzü ve onun işletim sistemine özel implementasyonları da benzer şekilde tanımlanır. Böylece farklı işletim sistemlerine özel görsel bileşenler oluşturulabilir.
GUIFactory arayüzü, ürün ailesi için ortak bir fabrika görevi görür. Bu arayüz, createButton() ve createCheckbox() gibi metotlar tanımlar. Bu metotlar, ilgili bileşenleri oluşturmak için kullanılır.
WindowsFactory ve MacOSFactory sınıfları, GUIFactory arayüzünü uygulayarak her işletim sistemi için uygun düğme ve onay kutusunu oluşturur. Böylece uygulama hangi işletim sistemindeyse, ona uygun görsel bileşenleri elde eder.
Application sınıfı, soyut fabrika üzerinden bileşenleri alır ve onları kullanır. Buradaki önemli nokta, uygulamanın WindowsButton, MacOSButton gibi sınıfların varlığından haberdar olmamasıdır. Tüm nesne üretimi GUIFactory arayüzü üzerinden yapılır.
Factory Method ve Abstract Factory, yaratıcı tasarım kalıpları arasında yer alan ve nesne oluşturma sürecini soyutlayan iki önemli yaklaşımdır. Her ikisi de nesne üretimini doğrudan new operatörü ile yapmak yerine, nesne oluşturma sürecini soyut arayüzler üzerinden yönetmeyi hedefler. Ancak kullanım amaçları ve sundukları esneklik açısından bazı temel farklara sahiptir.
Factory Method, tek bir ürün türü üretmeye odaklanır. Üst sınıf, nesnenin hangi türde olacağını bilmeden çalışabilir ve nesne oluşturma işlemi alt sınıflara bırakılır. Bu sayede sistem, yeni türde nesnelerle genişletilebilir. Ancak her yeni ürün için yeni bir alt sınıf tanımlanması gerekir.
Abstract Factory ise birbiriyle ilişkili veya bağımlı nesneleri (ürün ailesi) birlikte oluşturmayı sağlar. Örneğin, bir kullanıcı arayüzü kütüphanesinde aynı tema içinde kullanılacak düğme, onay kutusu ve menü gibi bileşenleri aynı soyut fabrika üzerinden üretmek mümkündür. Bu yaklaşım, ürün ailesi arasındaki tutarlılığı korur.
Kısaca özetlemek gerekirse:
Bu iki desen arasındaki temel farklar aşağıdaki gibidir:
Builder tasarım kalıbı, karmaşık nesnelerin adım adım ve kontrollü bir şekilde oluşturulmasını sağlar. Nesne oluşturulurken tüm parametrelerin tek bir yerde tanımlanması yerine, parça parça oluşturulması tercih edilir. Bu sayede aynı yapı süreciyle farklı türde nesneler oluşturulabilir. Aşağıdaki kod örneği bu tasarım kalıbını gösteren java implementasyonudur.
Factory Method ve Builder tasarım kalıpları, her ikisi de nesne oluşturmayı ele alsa da, bu süreçleri farklı şekillerde yönetir ve farklı senaryolarda tercih edilir. Aralarındaki temel fark, odak noktaları ve esneklik düzeyleridir.
Factory Method, bir nesne oluşturma işlemini alt sınıflara bırakır. Yani hangi tür nesne üretileceğine karar veren alt sınıftır. Bu desen genellikle tek adımda ve nispeten basit nesneler için uygundur. Örneğin, bir uygulamanın sedan ya da SUV türünde bir araba üretmesi gerektiğinde, bu seçim Factory üzerinden yapılabilir. Factory Method’un en büyük avantajı, istemci kodun (yani nesneyi kullanan kısmın), nesnenin tam türünü bilmesine gerek kalmadan nesneyle çalışabilmesidir.
Builder ise çok daha detaylı bir nesne oluşturma süreci sunar. Bu desen, nesneleri adım adım inşa etmek için kullanılır. Özellikle birçok parametreye veya farklı bileşenlere sahip karmaşık nesnelerin üretiminde tercih edilir. Aynı oluşturma süreciyle farklı türlerde nesneler oluşturmak mümkündür. Örneğin, bir bilgisayar üreticisi Builder kalıbıyla RAM, işlemci, depolama gibi bileşenleri farklı şekillerde bir araya getirerek hem oyun bilgisayarı hem de ofis bilgisayarı üretebilir.
Kısaca özetlemek gerekirse:
Bu iki kalıp bazen birlikte de kullanılabilir. Factory, doğru Builder’ı seçip, ardından bu Builder aracılığıyla karmaşık bir nesne oluşturma sürecini başlatabilir.
Prototype, mevcut bir nesnenin kopyalanarak yeni bir nesne oluşturulmasını sağlar. Bu kalıp, yeni nesneler yaratmak için new operatörüne bağımlı kalmak yerine, zaten var olan bir nesnenin klonlanması mantığına dayanır.
Ne zaman kullanılır?
Aşağıdaki kod örneği bu tasarım kalıbını gösteren java implementasyonudur.
Singleton, bir sınıfın yalnızca bir örneğinin (instance) oluşturulmasını garanti eden bir tasarım kalıbıdır. Bu desen, uygulama genelinde tek bir noktadan erişilmesi gereken durumlar için idealdir. Örneğin:
Aşağıdaki kod örneği bu tasarım kalıbını gösteren java implementasyonudur.
private static Singleton instance;
private Singleton()
public static Singleton getInstance()
1. Factory Method (Fabrika Metodu)
->Arayüz (Interface) Tanımı
-> Arayüzü Uygulayan (Implementing) Sınıflar
-> Soyut Fabrika Sınıfı
-> Somut Fabrika Sınıfları
-> Kullanım Senaryosu
2. Abstract Factory (Soyut Fabrika) Method
-> Ürün Arayüzleri Ve Ürünler
-> Soyut Fabrika Ve Alt Fabrikalar
->Uygulama Sınıfı
->Factory Method İle Abstract Factory Arasındaki Farklar
3. Builder (Kurucu) Tasarım Kalıbı
->Ürün (Product) – Araba sınıfı
->Builder Arayüzü – ArabaBuilder
->Concrete Builder – SedanBuilder
-> Yönetici (Director) – ArabaDirektoru
-> Kullanım – Main sınıfı
->Factory ve Builder Tasarım Kalıpları Arasındaki Fark
4.Prototype Tasarım Kalıbı
->Shape isimli soyut sınıf
->Rectangle sınıfı (Shape’in alt sınıfı)
->Circle sınıfı (bir başka Shape alt sınıfı)
->Kullanım Örneği
5.Singleton
->Singleton Sınıfı Tanımı
Bu madde yapay zeka desteği ile üretilmiştir.