Rumah  >  Artikel  >  Java  >  Kaedah pelaksanaan dan kaedah penulisan biasa corak tunggal Java

Kaedah pelaksanaan dan kaedah penulisan biasa corak tunggal Java

PHPz
PHPzke hadapan
2023-04-27 16:19:071432semak imbas

1. Mod lapar

Mod lapar juga dipanggil mod pramuat Ia secara langsung mencipta dan memulakan objek tunggal apabila kelas dimuatkan, jadi ia tidak mempunyai masalah keselamatan benang. Ia bergantung pada mekanisme kelas ClassLoader dan hanya dimuatkan sekali apabila program bermula, jadi tiada isu keselamatan benang Kod pelaksanaannya adalah seperti berikut:

public class Singleton {
    // 1.防止外部直接 new 对象破坏单例模式
    private Singleton() {}
    // 2.通过私有变量保存单例对象
    private static Singleton instance = new Singleton();
    // 3.提供公共获取单例对象的方法
    public static Singleton getInstance() {
        return instance;
    }
}

Kelebihan<.>: Pelaksanaan Mudah dan tiada isu keselamatan benang. Kelemahan: Objek dicipta apabila kelas dimuatkan Jika ia tidak digunakan selepas penciptaan, ia akan menyebabkan pembaziran sumber.

2. Mod malas

Mod malas dan mod lapar adalah sebaliknya Mod malas memuatkan (pemuatan tertunda), yang bermaksud ia hanya dimuatkan apabila ia dimuatkan. buat kali pertama. Ia akan dimulakan hanya apabila digunakan

Kod pelaksanaannya adalah seperti berikut:

public class Singleton {
    // 1.防止外部直接 new 对象破坏单例模式
    private Singleton() {}
    // 2.通过私有变量保存单例对象
    private static volatile Singleton instance = null;
    // 3.提供公共获取单例对象的方法
    public static Singleton getInstance() {
        if (instance == null) { // 第一次效验
            synchronized (Singleton.class) {
                if (instance == null) { // 第二次效验
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }
}

Mod malas menggunakan kunci pengesahan berganda dan tidak menentu. untuk memastikan keselamatan benang , seperti yang dapat dilihat daripada kod di atas, sama ada mod lelaki lapar atau mod lelaki malas, langkah pelaksanaannya adalah sama:

  • Buat pembina persendirian untuk menghalang Objek baru digunakan secara langsung di tempat panggilan lain, supaya objek yang dicipta bukan objek tunggal.

  • Buat pembolehubah peribadi untuk memegang objek tunggal.

  • Menyediakan kaedah awam untuk mengembalikan objek tunggal.

Berbanding dengan mod lapar, mod malas tidak akan menyebabkan pembaziran sumber, tetapi kaedah penulisannya lebih rumit.

3. Kelas dalaman statik

Kelas dalaman statik boleh memastikan keselamatan benang dan pemuatan malas Ia hanya akan melepasi mekanisme ClassLoader apabila dipanggil untuk memuatkan dan mulakan kelas statik dalaman, jadi ia selamat untuk benang Kod pelaksanaan mod ini adalah seperti berikut:

public class Singleton {
    // 1.防止外部直接 new 对象破坏单例模式
    private Singleton() {
    }
    // 2.静态内部类
    private static class SingletonHolder {
        private static final Singleton INSTANCE = new Singleton();
    }
    // 3.提供公共获取单例对象的方法
    public static final Singleton getInstance() {
        return SingletonHolder.INSTANCE;
    }
}

4

Penghitungan juga digunakan buat kali pertama. Ia akan dimuatkan dan dimulakan oleh mesin maya Java apabila ia digunakan, jadi ia juga selamat untuk benang dan dimuatkan malas Kod pelaksanaannya adalah seperti berikut:

public enum  EnumSingleton {
    INSTANCE;
    public EnumSingleton getInstance(){
        return INSTANCE;
    }
}

Atas ialah kandungan terperinci Kaedah pelaksanaan dan kaedah penulisan biasa corak tunggal Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam