記事のシングルトンデザインパターン(A)

シングルトンは、最も簡単なデザインパターンの一つです。クラスのインスタンスが1つだけ、我々はこのモデルを使用することができる場合は、データベース接続など、効率を改善し、資源の浪費を避けることができます。

シングルトンデザインパターンは、2つのモード怠惰と空腹の人に分けることができます。

1、空腹の男:

パブリック クラスシングルトン{
     プライベート 静的シングルトンシングルトン= 新しいシングルトン();
    プライベートシングルトン(){}
     パブリック 静的シングルトンのgetInstance(){
         戻りシングルトン。
    } 
}

これは、一度にクラスがロードされているので、それは必要性の唯一のインスタンスを初期化し、飢えスタイルと呼ばれています。これは最も単純な実装である、プライベートconstructorプロパティには、このような第二のインスタンスがないことを保証します。授業時間がロードされているので、ケースとなっているので、この実装は、スレッドセーフです。

2、怠惰なスタイル

パブリック クラスSingleton2 {
     プライベートSingleton2(){}
     プライベート 静的 Singleton2 singleton2 = NULL ;
    パブリック 静的Singleton2のgetInstance(){
         場合(singleton2 == NULL ){ 
            singleton2 = 新しいSingleton2()。
        } 
        戻りsingleton2。
    } 
}

中国風飢えた、怠惰な人間と異なる場合にのみ、使用中に、一意のインスタンスを生成します。それはスレッドセーフではありませんので、しかし、そのためにも、アクセスするオブジェクトが影響を受ける可能性がありsingleton2とアクセス速度の数、および状況の複数のインスタンスの出現を変更し、別の問題を抱えていました。

3、怠惰式2.0

パブリック クラスSingleton2 {
     プライベートSingleton2(){}
     プライベート 静的 Singleton2 singleton2 = NULL ;
    パブリック 静的 同期Singleton2のgetInstance(){
         場合(singleton2 == NULL ){ 
            singleton2 = 新しいSingleton2()。
        } 
        戻りsingleton2。
    } 
}

同期とインスタンスメソッドを取得するには、同期機能、内部リソースへの排他的アクセスをする、我々はスレッドセーフの問題を解決することができます。しかし、新たな問題が巻き起こっているが、また、それに対処する必要があり、それは効率です。

4、怠惰式3.0

public class Singleton2 {
    private Singleton2(){}
    private static Singleton2 singleton2 = null;
    public static Singleton2 getInstance(){
        if(singleton2 == null){
            synchronized (Singleton2.class){
                if(singleton2 == null){
                    singleton2 = new Singleton2();
                }
            }
        }
        return singleton2;
    }
}

注意到,如果使用同步函数,那么将会对内部所有代码上锁,意味着每次调用该实例,都要判断一下,效率很低。然而真正要考虑线程安全的地方仅仅是初始化实例的时候。所以为了提高效率,在锁代码块之前,先判断一下需不需要new实例,即是不是第一次访问。这样,大部分情况下不需要进同步块,提高了效率。

如有错误,欢迎批评指正。

おすすめ

転載: www.cnblogs.com/phdeblog/p/10972967.html