Try using it in your preferred language.

English

  • English
  • 汉语
  • Español
  • Bahasa Indonesia
  • Português
  • Русский
  • 日本語
  • 한국어
  • Deutsch
  • Français
  • Italiano
  • Türkçe
  • Tiếng Việt
  • ไทย
  • Polski
  • Nederlands
  • हिन्दी
  • Magyar

Çıkış Yap

translation

Bu, AI tarafından çevrilen bir gönderidir.

제이온

[Efektif Java] Öğe 3. Özel Oluşturucular veya Sayım Türüyle Tekil Olmayı Garanti Etme

  • tr Writing language: Korece
  • tr Referans Ülke: tr Tüm ülkeler country-flag

Dil Seç

  • Türkçe
  • English
  • 汉语
  • Español
  • Bahasa Indonesia
  • Português
  • Русский
  • 日本語
  • 한국어
  • Deutsch
  • Français
  • Italiano
  • Tiếng Việt
  • ไทย
  • Polski
  • Nederlands
  • हिन्दी
  • Magyar

Text summarized by durumis AI

  • Tekil, yalnızca bir örnek oluşturulabilen bir sınıftır ve durumsuz nesneler veya benzersiz sistem bileşenleri oluşturmak için kullanılır.
  • Tekil oluşturmanın yolları arasında public static üyenin final alan olması, statik fabrika yöntemi sağlamak ve sayım türü kullanmak bulunur ve sayım türü kullanmak en uygun yoldur.
  • Tekil sınıfı seri hale getirmek için, Serializable uygulaması gerekir ve tüm örnek alanları transient olarak bildirilmeli ve readResolve() yöntemi yeniden tanımlanmalıdır.

Tekil

Tekil Kavramı

Tekil, yalnızca bir örnek oluşturulabilen bir sınıfı ifade eder. Tekillerin tipik bir örneği, durumsuz nesneler veya benzersiz sistem bileşenleridir. Ancak tekil sınıflar, türü bir arayüz olarak tanımlayıp bunun uygulaması olarak tanımlamadıkça test edilmesi zor bir soruna sahiptir.


Tekil Oluşturma Yöntemleri

public static üyesi final alan olan yöntem


public class Elvis {

    public static final Elvis INSTANCE = new Elvis();

    private Elvis() {
    }

    public void speak() {
        System.out.println("elvis");
    }


Özel oluşturucu, Elvis örneğini başlatırken yalnızca bir kez çağırılır ve tüm sistemde benzersiz bir örnek olmasını sağlar. Ancak, AccessibleObject.setAccessible() kullanarak özel oluşturucuyu çağırmak mümkündür. Bu tür yansımalar aracılığıyla değiştirme yöntemi, ikinci nesnenin oluşturulması sırasında bir istisna fırlatılarak engellenebilir.


  • Avantajlar
    • Sınıfın tekil olduğu API'de açıkça gösterilir.
    • Kısa ve öz.


Statik fabrika yöntemini public static olarak sağlayan yöntem

public class Elvis {

    private static final Elvis INSTANCE = new Elvis();

    private Elvis() {
    }

    public static Elvis getInstance() {
        return INSTANCE;
    }

    public void speak() {
        System.out.println("elvis");
    }


Yansıma yoluyla yapılan değişiklikler dışında bu yöntem de tüm sistemde benzersiz bir örnek olmasını sağlar. Sadece alanı özel olarak değiştiriyor ve nesneyi döndürmek için statik fabrika yöntemi kullanılıyor.


  • Avantajlar
    • API'yi değiştirmeden tekil olmaktan çıkarılabilir.
      • Örneğin, statik fabrika yönteminin her bir iş parçacığı için farklı bir örnek döndürmesi sağlanabilir.
    • İstenirse, genel bir tekil fabrika yöntemi olarak değiştirilebilir.
    • Statik fabrikanın yöntem başvurusu sağlayıcı olarak kullanılabilir.
      • Örneğin, Elvis::getInstance yerine Supplier<Elvis> olarak kullanılabilir.


Yukarıdaki avantajlardan yararlanmak gerekmiyorsa, ilk yöntemi kullanmak daha iyidir.


Numaralandırma türünü kullanan yöntem

public enum Elvis {

    INSTANCE;

    public void speak() {
        System.out.println("elvis");
    }


En uygun yöntem, numaralandırma türünü kullanmaktır. Yukarıdaki iki yönteme kıyasla yansıma saldırılarına karşı daha güvenlidir ve kod daha temizdir. Ayrıca, aşağıda ayrıntılı olarak ele alınacak olsa da, yukarıdaki iki yöntemin seri hale getirilmesi sırasında ek kod eklenmesi gerektiği dezavantajı vardır.

Ancak, oluşturulmak istenen tekilin bir arayüzü devralması mümkündür, ancak bir sınıfı devralması mümkün değildir.


Tekil Sınıfların Seri Hale Getirilmesinde Dikkat Edilmesi Gereken Noktalar

Yukarıdaki yöntemlerden biri veya ikincisi kullanılarak oluşturulan tekil sınıflar seri hale getirilmek isteniyorsa, yalnızca Serializable'ı uygulamanın yanı sıra, tüm örnek alanları transient olarak ilan edilmeli ve readResolve() yöntemi yeniden tanımlanarak sağlanmalıdır.


private Object readResolve throws ObjectStreamException {
    return INSTANCE;


Kaynaklar

제이온
제이온
제이온
제이온
[Etkin Java] Öğe 4. Oluşturulmayı Engellemek İçin Özel Bir Oluşturucu Kullanın Sadece statik yöntemler ve alanlar içeren yardımcı sınıflar için, oluşturulmayı engellemek amacıyla oluşturucunun erişim belirtecini özel olarak ayarlanması önerilir. Bu, kullanıcıların oluşturucunun otomatik olarak oluşturulduğunu düşünmesini önler, kalı

28 Nisan 2024

[Etkin Java] Madde 5. Kaynakları Belirginleştirmeyin, Bağımlılık Enjeksiyonunu Kullanın Bir sınıfın harici kaynaklara bağımlılığı varsa, singleton ve statik yardımcı sınıflar kullanılmamalıdır. Bağımlılık enjeksiyonu, sınıfın esnekliğini, yeniden kullanılabilirliğini ve test edilebilirliğini iyileştirmeye yardımcı olabilir; fabrika yöntemi d

28 Nisan 2024

[Java] Yansıma Kavramı ve Kullanım Şekli Yansıma, Java programları çalışırken sınıf bilgilerine erişerek sınıfları manipüle etmeyi sağlayan bir API'dir. Çalışma zamanında sınıflar oluşturulmasını ve alanlara ve yöntemlere erişmeyi sağlar, ancak kapsüllemeyi ihlal edebilir ve performans düşüşüne

25 Nisan 2024

Rust'ın Eşzamanlılık Hatalarını Önleme Yolu Rust, eşzamanlı programlamanın zorluklarını aşmak için güçlü bir dildir. Tip sistemi ve sahiplik modeli sayesinde, iş parçacıkları arasında veri aktarımı ve paylaşımı güvenlidir. Mutex, Channel, Atomic gibi iç değişkenlik kalıpları ile paylaşılan değişken
곽경직
곽경직
곽경직
곽경직
곽경직

28 Mart 2024

Kavramsal Veri Modellemesi Kavramsal veri modelleme, varlıkları ayırma ve varlıklar arasındaki ilişkileri ERD ile gösterme sürecidir. Varlıklar bağımsız bilgi birimleridir ve öznitelikler, varlığın sahip olduğu verilerdir. Tanımlayıcılar, varlıkları benzersiz bir şekilde tanımlar v
제이의 블로그
제이의 블로그
제이의 블로그
제이의 블로그

8 Nisan 2024

[Eşzamanlılık] Atomik İşlem: Bellek Çiti ve Bellek Sıralaması Bu blog yazısında, atomik işlemlerde bellek sıralamasının nasıl dikkate alınacağı ve Sıralama seçeneklerinin önemi açıklanmaktadır. Relaxed, Acquire, Release, AcqRel, SecCst gibi çeşitli Sıralama seçenekleri hakkında açıklamaların yanı sıra, her seçeneğin
곽경직
곽경직
곽경직
곽경직
곽경직

12 Nisan 2024

Prisma Client'ı NestJS'de Birim Testleri İçin Taklit Etme Uygulama birim testleri sırasında dış bağımlılıkları kaldırmak önemlidir. Prisma ORM'nin Jest taklit etme yöntemi, birim testlerini kolayca gerçekleştirmenizi sağlar. jest-mock-extended paketini kurduktan sonra Prisma Client'ı taklit ederek, tür desteği a
제이의 블로그
제이의 블로그
제이의 블로그
제이의 블로그

2 Nisan 2024

[Javascript] Nesne Yapısı (V8) JavaScript'teki Nesne, V8 motorunda durumuna göre yapı gibi optimize edilmiş Hızlı mod ve karma tablo olarak çalışan Sözlük moduna dönüştürülür. Hızlı mod, anahtar ve değerlerin neredeyse sabit olduğu bir biçimde hızlıdır ancak yeni bir anahtar eklendiğin
곽경직
곽경직
곽경직
곽경직
곽경직

18 Mart 2024

[Bilişim alanında olmayanlar için, geliştirici olarak hayatta kalmak] 14. Yeni Başlayan Geliştiricilerin Sıkça Sorduğu Teknoloji Görüşme İçerikleri Özeti Yeni başlayan geliştiriciler için bir teknoloji görüşme hazırlık rehberidir. Ana bellek alanı, veri yapıları, RDBMS ve NoSQL, yordamsal ve nesne yönelimli, geçersiz kılma ve aşırı yükleme, sayfa değiştirme algoritmaları, süreçler ve iş parçacıkları, OSI 7
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자

3 Nisan 2024