Factory
- Java kursu
- İleri seviye
- Ders 38/82
- 5 dk
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
// 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
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
Shape s = ShapeFactory.create(____);
Shape s = ShapeFactory.create("circle");
Açıklama: Tür parametresi dizgi olarak verilir.