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());
}
}



