Kodlama dünyasının “Üretim Bandı”na hoş geldiniz: Fabrika Tasarım Deseni!

Mustafa şahin
Huawei Developers - Türkiye
3 min readDec 27, 2023
Factory Tasarım Deseni

Giriş

Selamlar! Fabrika Deseni, nesne oluşturmanın karmaşık olduğu durumlarda devreye girer. Diyelim ki bir oyun yazıyorsunuz ve oyunda farklı türde düşman karakterleri var. Her bir düşmanın oluşturulması farklı özellikler gerektiriyor. İşte burada Fabrika Deseni, sanki bir şef gibi, “Bu düşman için şu özellikler, bu düşman için bu özellikler” diyerek size yardımcı olur.

Neden Fabrika Deseni Kullanmalıyız?

  1. Daha Az Karmaşa: Nesne oluşturma işlemlerini tek bir yerde toplar, böylece kodunuzda “Bu nesne nereden çıktı?” karmaşasını önler.
  2. Esneklik: Farklı durumlar için farklı nesneler üretebilmenizi sağlar. Tıpkı bir restoranda “Bugün ne yesem?” diye düşünürken, menüdeki çeşitlilik gibi.
  3. Bakım Kolaylığı: Gelecekte kodunuza yeni bir nesne türü eklemek istediğinizde, sadece fabrikayı güncellemeniz yeterli olur. Bu, evinizi yeniden dekore etmek yerine, sadece birkaç yeni mobilya eklemek gibidir.

Gerçek Hayat Senaryosu

Diyelim ki, bir e-ticaret uygulaması geliştiriyorsunuz ve müşterilerinize farklı ödeme seçenekleri sunuyorsunuz: Kredi kartı, PayPal, ya da Bitcoin. Fabrika Deseni burada devreye giriyor ve “Müşteri kredi kartıyla mı ödeyecek, yoksa PayPal ile mi?” gibi kararları sizin için kolaylaştırıyor. Böylece, her ödeme yöntemi için ayrı ayrı kod yazmak yerine, fabrikanız bu işi hallediyor.

Tabii ki, Fabrika Tasarım Desenini ödeme yöntemleri üzerinden açıklamak için bir Java kod örneği ekleyelim. Bu örnek, müşterilerin kredi kartı, PayPal ya da Bitcoin ile ödeme yapabildiği bir senaryoyu ele alacak. İşte başlıyoruz:

Önce Gerekli Arayüz ve Sınıfları Oluşturalım

Ödeme Arayüzü

public interface Payment {
void pay(double amount);
}

Kredi Kartı Ödeme Sınıfı

public class CreditCardPayment implements Payment {
@Override
public void pay(double amount) {
System.out.println("Ödeme " + amount + " TL ile Kredi Kartı kullanılarak yapıldı.");
}
}

PayPal Ödeme Sınıfı

public class PayPalPayment implements Payment {
@Override
public void pay(double amount) {
System.out.println("Ödeme " + amount + " TL ile PayPal kullanılarak yapıldı.");
}
}

Bitcoin Ödeme Sınıfı

public class BitcoinPayment implements Payment {
@Override
public void pay(double amount) {
System.out.println("Ödeme " + amount + " TL ile Bitcoin kullanılarak yapıldı.");
}
}

Şimdi Fabrika Sınıfını Oluşturalım

Ödeme Fabrikası

public class PaymentFactory {
public static Payment getPaymentMethod(String type) {
switch (type) {
case "CreditCard":
return new CreditCardPayment();
case "PayPal":
return new PayPalPayment();
case "Bitcoin":
return new BitcoinPayment();
default:
throw new IllegalArgumentException("Ödeme türü tanımlanmadı.");
}
}
}

Son olarak main class

public class Main {
public static void main(String[] args) {
Payment payment = PaymentFactory.getPaymentMethod("CreditCard");
payment.pay(250.0);

payment = PaymentFactory.getPaymentMethod("PayPal");
payment.pay(75.5);

payment = PaymentFactory.getPaymentMethod("Bitcoin");
payment.pay(500.0);
}
}

Nasıl Çalışır?

Bu kodda, PaymentFactory sınıfı, ödeme tipine göre uygun ödeme yöntemi nesnesini oluşturur. Örneğin, “CreditCard” için CreditCardPayment, “PayPal” için PayPalPayment ve “Bitcoin” için BitcoinPayment nesneleri oluşturulur. Ana sınıfta ise bu fabrika metodunu kullanarak gerekli ödeme yöntemini elde ediyoruz ve ödeme işlemini gerçekleştiriyoruz. Bu örnek, Fabrika Tasarım Deseninin nasıl kullanılabileceğini ve özellikle farklı ödeme yöntemleri için nasıl uygulanabileceğini göstermektedir. Kodun okunabilirliğini ve bakımını kolaylaştıran bu yaklaşım, aynı zamanda sisteme yeni ödeme yöntemleri eklendiğinde kolay genişletilebilir olmasını sağlar.

Sonuç

Fabrika Tasarım Deseni, yazılım dünyasında karşılaştığınız “Bu nesneyi nasıl ve ne zaman oluşturacağım?” sorununa şık ve pratik bir çözüm sunar. Bu desen sayesinde, kodlarınız daha düzenli, anlaşılır ve bakımı kolay hale gelir. Siz de “Nesne üretim bandım” diyebileceğiniz bu harika tasarım desenini öğrenerek, yazılım projelerinize değer katabilirsiniz.

Referanslar

--

--