CodeBlanks Logo Icon CodeBlanks

Factory

Factory desenini öğrenirsin.

Factory deseni

Factory, nesne oluşturmayı merkezi bir yere taşır. İstemci hangi somut sınıfın oluşturulduğunu bilmek zorunda kalmaz; yalnızca bir arayüz üzerinden çalışır. Bu, kodu somut sınıflara olan bağımlılıktan kurtarır.

Örnek: ShapeFactory.create("circle") bir Shape döndürür; içeriği Circle mı yoksa başka bir sınıf mı, istemciyi ilgilendirmez. Yeni bir şekil türü eklemek için yalnızca fabrika yöntemini değiştirmek yeterlidir. Bu esneklik özellikle büyük sistemlerde değerlidir.

Arayüz ve somut sınıflar

Factory'nin temeli ortak bir arayüzdür. Shape arayüzü draw yöntemini tanımlar; Circle ve Square bu arayüzü uygular. Fabrika, parametreye göre uygun somut sınıfı döndürür.

Bu sayede istemci Shape s = factory.create("circle") yazıp s.draw() çağırır; somut tür görünmez. Arayüz değişmeden yeni somut sınıflar eklemek kolaylaşır. Bu, açık-kapalı ilkesini (open-closed) destekler.

Uygulama ShapeFactory ile şekil oluştur

Bir Shape arayüzü tanımla: void draw(). Circle sınıfı bu arayüzü uygulasın ve draw içinde System.out.println ile daire yazdırsın. ShapeFactory sınıfında static Shape create(String type) yöntemi type "circle" ise new Circle() döndürsün. main içinde ShapeFactory.create("circle") ile al ve draw çağır.

Başlangıç kodu

Main.java
// Shape arayüzünü ve Circle sınıfını tanımla
// ShapeFactory.create yöntemini ekle
// main içinde draw çağır

Örnek çözüm

Main.java
interface Shape { void draw(); }

class Circle implements Shape {
    public void draw() { System.out.println("daire"); }
}

class ShapeFactory {
    public static Shape create(String type) {
        if (type.equals("circle")) return new Circle();
        return null;
    }
}

public class FactoryDemo {
    public static void main(String[] args) {
        Shape s = ShapeFactory.create("circle");
        s.draw();
    }
}

Beklenen çıktı

daire

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Factory deseni neyi gizler?

  • Veriyi
  • Hangi somut sınıfın oluşturulduğunu Doğru cevap
  • Yöntem imzasını
  • Arayüzü

Açıklama: Factory, hangi somut sınıfın oluşturulduğunu istemciden gizler.

2 Factory kavramlarını eşleştir

Kavram Anlamı
create("circle") Fabrika yöntemi
Shape Ortak arayüz
Circle Somut sınıf
s.draw() İstemci çağrısı

3 Factory çağrısını tamamla

Soru
Shape s = ShapeFactory.create(____);
Cevap
Shape s = ShapeFactory.create("circle");

Açıklama: Tür parametresi dizgi olarak verilir.

İleri seviye bölümündeki tüm dersler