Genel

Java Tasarım Desenleri : Abstract Factory Pattern | Design Pattern

Abstract Factory Pattern

Abstract Factory Pattern Dersi ile ilgili videoya aşağıdaki adresten erişebilirsiniz.

Abstract Factory Pattern, yaratımsal bir tasarım desenidir ve ilgili veya bağımlı nesnelerin bir ailesini oluşturmak için kullanılır. Bu desen, farklı nesne gruplarını oluşturmak için soyut bir fabrika sağlar ve bu fabrikalar aracılığıyla nesnelerin oluşturulmasını sağlar.

Temel Bileşenler

  • Abstract Factory (Soyut Fabrika): Bu, ilgili nesnelerin bir ailesini oluşturmak için soyut bir arayüz sağlar.
  • Concrete Factory (Somut Fabrika): Bu, Abstract Factory’yi genişletir ve belirli bir nesne ailesini oluşturan somut nesneleri üretir.
  • Abstract Product (Soyut Ürün): Bu, Abstract Factory’nin oluşturduğu nesne ailesinin soyut bir temsilcisidir.
  • Concrete Product (Somut Ürün): Bu, Abstract Product’ın somut bir uygulamasını temsil eder.

Amaç

Abstract Factory Pattern’in amacı, ilgili veya bağımlı nesnelerin bir ailesini oluşturmak ve bunları birbirleriyle uyumlu hale getirmektir. Bu sayede, nesne oluşturma işlemi soyutlanır ve istemci kodu, oluşturulan nesnelerin gerçek türlerinden bağımsız hale gelir.

Avantajlar

  • Esneklik: Abstract Factory Pattern, ilgili nesnelerin bir ailesini oluşturmak için soyut bir arayüz sağlar, bu da kodun esnek olmasını sağlar.
  • Modülerlik: Abstract Factory Pattern, ilgili nesnelerin oluşturulmasını birbirinden bağımsız fabrikalar aracılığıyla sağlar, bu da kodun modüler olmasını sağlar.
  • Değiştirilebilirlik: Uygulamanın gereksinimleri değiştiğinde, farklı bir somut fabrika kullanarak nesnelerin oluşturulmasını kolayca değiştirebilirsiniz.

Abstract Factory Pattern, ilgili nesnelerin oluşturulmasını soyutlar ve bu sayede kodun daha esnek, modüler ve değiştirilebilir olmasını sağlar.


public abstract class Banka {

    abstract String bankaAdi();
    abstract double bankaKrediOrani();

    public void krediHesapla() {
        System.out.println(bankaAdi() + " bankasının kredi oranı " + bankaKrediOrani());

    }
}

public interface BankaFactory {

    Banka bankaOlustur();
}

public class Isbankasi extends Banka {
    @Override
    String bankaAdi() {
        return "İş Bankası";
    }

    @Override
    double bankaKrediOrani() {
        return 2.5;
    }
}

public class Akbank extends Banka {
    @Override
    String bankaAdi() {
        return "Akbank";
    }

    @Override
    double bankaKrediOrani() {
        return 1.2;
    }
}

public class AkbankFactory implements BankaFactory {
    @Override
    public Banka bankaOlustur() {
        return new Akbank();
    }
}

public class VakifBank extends Banka {
    @Override
    String bankaAdi() {
        return "Vakıfbank";
    }

    @Override
    double bankaKrediOrani() {
        return 2.7;
    }
}

public class VakifbankFactory implements BankaFactory {
    @Override
    public Banka bankaOlustur() {
        return new VakifBank();
    }
}
public class ZiraatBankasi extends Banka {
    @Override
    String bankaAdi() {
        return "Ziraat Bankası";
    }

    @Override
    double bankaKrediOrani() {
        return 2.1;
    }
}

public class Main {
    public static void main(String[] args) {

        BankaFactory akbankFactory=new AkbankFactory();
        Banka akbank = akbankFactory.bankaOlustur();
        System.out.println(akbank.bankaAdi() + " -> " + akbank.bankaKrediOrani());

        BankaFactory vakifbankFactory=new VakifbankFactory();
        Banka vakifbank = vakifbankFactory.bankaOlustur();
        System.out.println(vakifbank.bankaAdi() + " -> " + vakifbank.bankaKrediOrani());

    }
}

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir