0Pricing
Java Academy · Ders

Yardımcı Sınıflar ve Statik Fabrika Yöntemleri

Örneklenemeyen yardımcı sınıflar tasarlayın ve yapıcılara alternatif olarak statik fabrika yöntemleri sunun.

Yardımcı Sınıflar ve Statik Fabrika Yöntemleri, 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.

Yardımcı Sınıflar ve Statik Fabrika Metotları

Yardımcı sınıflar, örnek durumu olmayan statik yardımcı metotlar sağlar. Statik fabrika metotları, daha iyi okunabilirlik, önbelleğe alma ve esneklik sunan, kuruculara adlandırılmış alternatiflerdir.

Yardımcı Sınıflar

Bir yardımcı sınıfın örnek durumu yoktur — statik metotlardan oluşan bir kapsayıcıdır. Özel bir kurucu tanımlayarak sınıfı örneklenemez hâle getirin.

final class StringUtils {
    // Private constructor prevents instantiation
    private StringUtils() {
        throw new UnsupportedOperationException("Utility class");
    }

    public static boolean isBlank(String s) {
        return s == null || s.strip().isEmpty();
    }

    public static String capitalize(String s) {
        if (isBlank(s)) return s;
        return Character.toUpperCase(s.charAt(0)) + s.substring(1).toLowerCase();
    }
}

System.out.println(StringUtils.isBlank("  ")); // true
System.out.println(StringUtils.capitalize("hELLO")); // Hello

Standart Kütüphanedeki Yardımcı Sınıflar

Java'nın standart kütüphanesi yardımcı sınıflarla doludur: koleksiyonlar, diziler, nesneler, dosyalar, yollar ve matematik işlemleri.

import java.util.*;

List<Integer> nums = new ArrayList<>(Arrays.asList(5, 2, 8, 1, 9, 3));

Collections.sort(nums);
System.out.println(nums); // [1, 2, 3, 5, 8, 9]

System.out.println(Collections.min(nums)); // 1
System.out.println(Collections.max(nums)); // 9

Collections.shuffle(nums); // random order

int[] arr = {3, 1, 4, 1, 5};
Arrays.sort(arr);
System.out.println(Arrays.toString(arr)); // [1, 1, 3, 4, 5]
System.out.println(Arrays.binarySearch(arr, 4)); // 3 (index)

Statik Fabrika Metotları

Statik fabrika metodu, bir örnek oluşturan ve döndüren, adlandırılmış bir statik metottur. Avantajları: açıklayıcı adlar kullanabilir, önbelleğe alınmış veya alt tür örnekleri döndürebilir ve null döndürebilir.

class Connection {
    private final String host;
    private final int port;
    private final boolean ssl;

    private Connection(String host, int port, boolean ssl) {
        this.host = host; this.port = port; this.ssl = ssl;
    }

    // Named factory methods — more expressive than constructors
    public static Connection plain(String host) {
        return new Connection(host, 80, false);
    }
    public static Connection secure(String host) {
        return new Connection(host, 443, true);
    }
}
Connection c = Connection.secure("api.example.com");
// Much clearer than: new Connection("api.example.com", 443, true)

Statik Fabrikayla Önbelleğe Alma

Statik fabrikalar, ortak değerler için tekrarlanan tahsisatı önleyerek önbelleğe alınmış örnekler döndürebilir (Integer.valueOf değerini -128..127 aralığında yaptığı gibi).

class Color {
    private static final Map<String, Color> CACHE = new HashMap<>();

    public final int r, g, b;

    private Color(int r, int g, int b) {
        this.r = r; this.g = g; this.b = b;
    }

    public static Color of(int r, int g, int b) {
        String key = r + "," + g + "," + b;
        return CACHE.computeIfAbsent(key, k -> new Color(r, g, b));
    }

    public static final Color RED   = of(255, 0, 0);
    public static final Color GREEN = of(0, 255, 0);
    public static final Color BLUE  = of(0, 0, 255);
}
System.out.println(Color.of(255,0,0) == Color.RED); // true (cached)

Fabrika ve Kurucu: Adlandırma

Statik fabrika metotları için yaygın adlandırma kuralları:

  • of — birleştirici fabrika
  • from — dönüştürücü fabrika
  • valueOf — dönüştürücü fabrika (eski API'ler)
  • getInstance — tekil örnek
  • create/newInstance — yeni nesne
  • get — esnek kullanım
// Java API examples:
Optional.of(value)               // of
LocalDate.from(temporal)         // from
Integer.valueOf(42)              // valueOf
Calendar.getInstance()           // getInstance
Array.newInstance(type, length)  // newInstance

// Your own:
HttpRequest.post("https://api.example.com/users")
ApiResponse.error(404, "Not found")
Payment.creditCard("4242...", 9999, "USD")

Alt Türleri Döndürme

Bir fabrika metodu, bildirilen dönüş türü arayüz olsa bile bir alt tür döndürebilir. Çağıranlar somut uygulamadan bağımsız hâle gelir.

interface Validator<T> {
    boolean validate(T value);
    String errorMessage();
}

class EmailValidator implements Validator<String> {
    public boolean validate(String email) { return email.contains("@"); }
    public String errorMessage() { return "Invalid email address"; }
}

class Validators {
    // Returns interface type — hides implementation
    public static Validator<String> email() { return new EmailValidator(); }
    public static Validator<String> notBlank() {
        return new Validator<>() {
            public boolean validate(String s) { return s != null && !s.isBlank(); }
            public String errorMessage() { return "Value required"; }
        };
    }
}

Statik Fabrikayla Builder Oluşturma

Karmaşık nesne oluşturma işlemleri için özel bir kurucuyu statik fabrika ve iç içe bir Builder ile birleştirin.

class EmailMessage {
    private final String to, subject, body;
    private final boolean html;

    private EmailMessage(Builder b) {
        this.to = b.to; this.subject = b.subject;
        this.body = b.body; this.html = b.html;
    }

    public static Builder builder(String to) { return new Builder(to); }

    public static class Builder {
        private final String to;
        private String subject = "", body = "";
        private boolean html = false;

        Builder(String to) { this.to = to; }
        public Builder subject(String s) { this.subject = s; return this; }
        public Builder body(String b) { this.body = b; return this; }
        public Builder html() { this.html = true; return this; }
        public EmailMessage build() { return new EmailMessage(this); }
    }
}
EmailMessage.builder("alice@co.com").subject("Welcome!").html().build();

Fabrika Metotlarında Doğrulama

Fabrika metotları, oluşturma işleminden önce girdi doğrulaması yapmak için mükemmeldir — bağlam içeren anlamlı istisnalar fırlatın.

class PortNumber {
    private final int value;

    private PortNumber(int value) { this.value = value; }

    public static PortNumber of(int port) {
        if (port < 1 || port > 65535)
            throw new IllegalArgumentException(
                "Port must be 1-65535, got: " + port);
        return new PortNumber(port);
    }

    public static PortNumber http()  { return new PortNumber(80); }
    public static PortNumber https() { return new PortNumber(443); }

    public int value() { return value; }
    public boolean isPrivileged() { return value < 1024; }
}
System.out.println(PortNumber.https().isPrivileged()); // true

Koleksiyonlar API'si: Statik Fabrikalar

Java 9 ve sonraki sürümler, değiştirilemez koleksiyonlar oluşturan statik fabrika metotları olan List.of(), Set.of() ve Map.of() yöntemlerini ekledi.

import java.util.*;

List<String> fruits = List.of("Apple", "Banana", "Cherry");
Set<Integer> ids    = Set.of(1, 2, 3, 4, 5);
Map<String, Integer> ages = Map.of("Alice", 30, "Bob", 25);

// All are unmodifiable:
try {
    fruits.add("Durian"); // UnsupportedOperationException
} catch (UnsupportedOperationException e) {
    System.out.println("Cannot modify!");
}

// Map.entry and Map.ofEntries for > 10 entries
Map<String, String> config = Map.ofEntries(
    Map.entry("host", "localhost"),
    Map.entry("port", "8080")
);

Fabrika Metotlarını Ne Zaman Tercih Etmeli

Şu durumlarda kurucular yerine statik fabrika metotlarını tercih edin:

  • Açıklayıcı bir ad istediğinizde
  • Fabrikanın önbelleğe alınmış veya alt türden bir örnek döndürebildiğinde
  • Oluşturmadan önce doğrulama gerektiğinde
  • Örnek sayısını kontrol etmek istediğinizde (tekil örnek, havuz)
// Constructor: hard to know what this means
new Complex(0.5, -1.2);

// Factory: clear meaning
Complex.fromPolar(1.3, Math.PI / 4); // polar form
Complex.rectangular(0.5, -1.2);      // rectangular form

// Constructor: no caching
new Boolean(true); // deprecated — creates new object!

// Factory: returns cached instance (Boolean.TRUE or FALSE)
Boolean.valueOf(true); // returns Boolean.TRUE singleton

Kısa Kontrol

Bir statik fabrika metodunun herkese açık bir kurucuya göre temel avantajı nedir?

Özet: Yardımcı Sınıflar ve Statik Fabrika Metotları

Önemli noktalar:

  • Yardımcı sınıflar: özel kurucusu ve tümü statik metotları olan final sınıflardır
  • Statik fabrika metotları, kuruculara adlandırılmış alternatiflerdir
  • Yaygın adlandırmalar: of, from, valueOf, getInstance, create, newInstance
  • Fabrikalar önbelleğe alınmış örnekler döndürebilir — Integer.valueOf(-128..127) örneğine bakın
  • Fabrikalar somut uygulamayı gizlerken alt türler döndürebilir
  • Karmaşık, çok parametreli oluşturma işlemleri için fabrikaların içinde oluşturucular kullanın

Sıkça Sorulan Sorular

“Yardımcı Sınıflar ve Statik Fabrika Yöntemleri” dersi ücretsiz mi?

Evet — “Yardımcı Sınıflar ve Statik Fabrika Yöntemleri” 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.

“Yardımcı Sınıflar ve Statik Fabrika Yöntemleri” dersinde ne öğreneceğim?

Örneklenemeyen yardımcı sınıflar tasarlayın ve yapıcılara alternatif olarak statik fabrika yöntemleri sunun. 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.

“Yardımcı Sınıflar ve Statik Fabrika Yöntemleri” 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

  1. Yöntem Aşırı Yükleme Kuralları
  2. Değişken Sayıda Parametre
  3. Statik Alanlar ve Sabitler
  4. Yardımcı Sınıflar ve Statik Fabrika Yöntemleri
← Java Academy Sayfasına Dön