3[Item 3]-Privateジェネレータまたは列挙タイプを使用して単一周を保証
8867 ワード
単頓とは何ですか。
単一インスタンスとは、1つのインスタンスしか生成できないクラスです.すなわち、オブジェクトまたは設計では、一意のシステムコンポーネントである必要があります.
単一インスタンスではmockでインスタンスを置き換えることができないため、テストが困難になる可能性があります.
単輪を作成する方法は、通常、次の2つの方法の1つです.
Singletonを作成する方法
(1)共通静的finalフィールド方式の単転
-->ただし、Reflection APIはオブジェクトにアクセスします.setAccessを使用してプライベートジェネレータを呼び出すことができます.
-->ジェネレータを修正して、2番目のオブジェクトを作成しようとしたときに例外を放出します.
public class Elvis{
public static final Elvis INSTANCE = new Elvis();
private Elvis() {...}
public void leaveTheBuilding() {...}
}
(2)静的工場式単転
public class Elvis{
private static final Elvis INSTANCE = new Elvis();
private Elvis() {...}
public static Elvis getInstance() { retrun INSTANCE; }
public void leaveTheBuilding() {...}
}
[利点]public static Elvis getInstance() { retrun new Elvis(); }
// 제네릭으로 타입설정 가능한 인스턴스를 만들어두고,
// 반환 시에 제네릭으로 받은 타입을 이용해 타입을 결정한다.
public class GenericFactoryMethod {
public static final Set EMPTY_SET = new HashSet();
public static final <T> Set<T> emptySet() {
return (Set<T>) EMPTY_SET;
}
}
출처: https://jake-seo-dev.tistory.com/13 [제이크서 블로그]
Elvis::getInstace를 Supplier<Evlis> 로 사용한다.
(3)1つの要素がEnumであることを宣言する.
public enum Elvis{
// 인스턴스는 하나만 만들 수 있음
INSTANCE;
public String getName() {
return "아무개";
}
}
String name = Elvis.INSTANCE.getName();
Reference
この問題について(3[Item 3]-Privateジェネレータまたは列挙タイプを使用して単一周を保証), 我々は、より多くの情報をここで見つけました https://velog.io/@alsgus92/Effective-Java-3-Item-3-Private-생성자나-열거-타입으로-싱글턴임을-보증하라テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol