Javaシングルケースベストプラクティス

1391 ワード

ネット上のJava単例モードについての議論と探究はすでにその本来の価値をはるかに超えており、この文章は単例が必要な場合のbest practiceを記録するために使用されている.
餓漢単例
99%の場合、怠け者の単例(遅延初期化)は必要ありません.
餓漢コード(JVM類ロードメカニズム保証単例)
public class MySingleton {

    private static final MySingleton instance = new MySingleton();

    private MySingleton() {}

    public static MySingleton getInstance() {
        return instance;
    }
}

それとも遅延ロードが必要ですか?
Initialization-on-demand holder idiom単例(JVMロードメカニズム保証単例)
public class MyHolderSingleton {

    private static final class Holder {
        private static final MyHolderSingleton instance = new MyHolderSingleton();
    }

    private MyHolderSingleton(){}

    public static MyHolderSingleton getInstance() {
        return Holder.instance;
    }
}

References
上の2つの方法はすでに基本的にシーンを必要とする可能性のある単例の方法であり、彼らを理解して覚えてから、単例を見なくなった.ベストプラクティスに加えて、単一の例のすべての可能な問題と原理を探る必要がある場合は、次の表を参照してください.
  • https://stackoverflow.com/a/2521930/1468013 簡単で直接的で、餓漢方式かholder方式かenum
  • https://www.journaldev.com/1377/java-singleton-design-pattern-best-practices-examples これは解釈が最も完全で,最も広くカバーされている編であり,反射,シーケンス化など
  • も含まれている.
  • https://en.wikipedia.org/wiki/Initialization-on-demand_holder_idiom holderのwikipedia
  • http://www.infoq.com/cn/articles/double-checked-locking-with-delay-initialization#anch102163 二重検査ロックについて、volatileを使う理由
  • について話しました.