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

Kaedah pelaksanaan dan kaedah penulisan biasa corak tunggal Java

PHPz
Lepaskan: 2023-04-27 16:19:07
ke hadapan
1473 orang telah melayarinya

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;
    }
}
Salin selepas log masuk

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;
    }
}
Salin selepas log masuk

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;
    }
}
Salin selepas log masuk

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;
    }
}
Salin selepas log masuk

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!

Label berkaitan:
sumber:yisu.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan