Akıcı API ile Builder Kalıbı
Karmaşık nesneleri, çok parametreli yapıcılardan kaçınmak için akıcı bir oluşturucuyla adım adım kurun.
Akıcı API ile Builder Kalıbı, CoddyKit'te ücretsiz bir Java Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Java Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Java Academy kursu toplamda 4 dersten oluşur.
Yapıcıların Çoğalması Sorunu
Bir sınıfta çok sayıda isteğe bağlı parametre olduğunda yapıcıların sayısı artar: 2 parametreli, 3 parametreli, 4 parametreli... Builder deseni bu sorunu akıcı, adım adım bir yapılandırma arayüzüyle çözer.
// Without builder — hard to read:
Pizza p = new Pizza("large", "thin", true, false, true, false, "mozzarella");Temel Builder Yapısı
Statik iç içe bir Builder sınıfı oluşturun. Dış sınıfın, Builder'ı kabul eden özel bir yapıcısı olsun. Builder'daki her ayarlayıcı metot, akıcı zincirleme için this döndürür.
public final class Pizza {
private final String size, crustType, cheese;
private final boolean extraSauce, pepperoni;
private Pizza(Builder b) {
this.size = b.size; this.crustType = b.crustType;
this.cheese = b.cheese; this.extraSauce = b.extraSauce;
this.pepperoni = b.pepperoni;
}
public static class Builder {
private final String size;
private String crustType = "regular", cheese = "mozzarella";
private boolean extraSauce, pepperoni;
public Builder(String size) { this.size = size; }
public Builder crustType(String c) { this.crustType = c; return this; }
public Builder cheese(String c) { this.cheese = c; return this; }
public Builder extraSauce() { this.extraSauce = true; return this; }
public Builder pepperoni() { this.pepperoni = true; return this; }
public Pizza build() { return new Pizza(this); }
}
}Akıcı Arayüz Kullanımı
Builder, bir cümle gibi okunur. Zorunlu parametreler yapıcıya, isteğe bağlı olanlar ise metot çağrılarına verilir. Son build() çağrısı değişmez nesneyi oluşturur.
Pizza p = new Pizza.Builder("large")
.crustType("thin")
.extraSauce()
.pepperoni()
.build();
System.out.println(p);build() İçinde Doğrulama
Nesneyi oluşturmadan önce build() içine doğrulama mantığı ekleyin. Geçersiz birleşimler için IllegalStateException veya IllegalArgumentException fırlatın.
public Pizza build() {
if (size == null || size.isBlank())
throw new IllegalArgumentException("Size required");
if (extraSauce && crustType.equals("stuffed"))
throw new IllegalStateException("No extra sauce on stuffed crust");
return new Pizza(this);
}Değişmez Nesneler için Builder
Dış sınıf Builder'dan tek seferde oluşturulduğu için tüm alanlar değişmez olarak tanımlanabilir. Böylece ortaya çıkan nesne tamamen değişmez ve iş parçacığı güvenli olur.
public final class Address {
private final String street, city, country;
private final String postalCode;
private Address(Builder b) { ... } // all finals
// no setters — immutable!
}Kendilik Türüyle Jenerik Builder
Kalıtım hiyerarşileri için özyinelemeli bir jenerik tür parametresi (SELF extends Builder<SELF>) kullanın; böylece alt sınıf Builder'ları zincirleme metotlardan alt sınıf türünü döndürür.
public abstract static class Builder<SELF extends Builder<SELF>> {
String name;
@SuppressWarnings("unchecked")
public SELF name(String n) { this.name = n; return (SELF) this; }
public abstract Vehicle build();
}Lombok @Builder
Lombok'un @Builder açıklaması, Builder altyapısının tamamını derleme zamanında oluşturur. Varsayılan alan değerleri için @Builder.Default, koleksiyonlar için @Singular kullanın.
@Builder
public class Report {
private final String title;
@Builder.Default private final int pageCount = 1;
@Singular private final List<String> authors;
}
// Usage:
Report r = Report.builder().title("Q4").author("Alice").author("Bob").build();JDK'da Builder
Birçok JDK sınıfı Builder tarzı arayüzler kullanır: StringBuilder, HttpRequest.newBuilder(), ProcessBuilder, Stream.Builder. Bu deseni tanıyın.
HttpRequest req = HttpRequest.newBuilder()
.uri(URI.create("https://api.example.com/users"))
.header("Accept", "application/json")
.GET()
.build();Builder ve Fabrika Karşılaştırması
Bir nesne çok sayıda parametre ve adım adım yapılandırma gerektiriyorsa Builder kullanın. Tüm varyantlar basitse ve oluşturma tek çağrıda yapılabiliyorsa fabrika kullanın.
Test Verileri için Builder
Builder'lar testlerde çok kullanışlıdır: Bir yardımcıda temel bir Builder oluşturun, ardından her test durumu için yalnızca ilgili alanları geçersiz kılın. Böylece testler DRY ilkesine uygun ve okunabilir kalır.
User defaultUser() { return new User.Builder("test@example.com").name("Test User").build(); }
User adminUser() { return new User.Builder("admin@example.com").name("Admin").role(ADMIN).build(); }İş Parçacığı Güvenliği
Builder'ın kendisi iş parçacığı güvenli değildir — bir Builder'ı iş parçacıkları arasında paylaşmayın. Tüm alanlar değişmezse ve değiştirilebilir nesneler paylaşılmazsa, ondan oluşturulan ürün değişmez ve iş parçacığı güvenli olabilir.
Kısa Kontrol
Bir Builder metodunu "akıcı" yapan nedir?
Özet
Builder, yapıcıların çoğalması sorununu çözer. Statik iç içe bir Builder sınıfı kullanın, her ayarlayıcıdan this döndürün, build() içinde doğrulama yapın ve değişmez bir nesne oluşturun. Lombok'un @Builder açıklaması tekrarlayan kodu otomatikleştirir.
Sıkça Sorulan Sorular
“Akıcı API ile Builder Kalıbı” dersi ücretsiz mi?
Evet — “Akıcı API ile Builder Kalıbı” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Java Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Java Academy kursu toplamda 4 dersten oluşur.
“Akıcı API ile Builder Kalıbı” dersinde ne öğreneceğim?
Karmaşık nesneleri, çok parametreli yapıcılardan kaçınmak için akıcı bir oluşturucuyla adım adım kurun. Java Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Java Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Java Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.
“Akıcı API ile Builder Kalıbı” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Java Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Java Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Singleton: İş Parçacığı Güvenli Uygulamalar
- Fabrika Yöntemi Kalıbı
- Ürün Aileleri için Abstract Factory
- Akıcı API ile Builder Kalıbı