제3조: 사유화 구조기나 매거 유형 강화singleton 속성

2653 단어 Singleton
1.5 릴리즈 이전에는 일반적으로 두 가지 방법으로 단일 모드를 구현했습니다.
두 가지 방법의 전제는 모두 사유화 구조기인 다음에 서로 다른 방식으로 대상을 얻는 것이다.
첫 번째: 공공 정적 변수를 통해 획득
public class Elivs{

    //  

    private Elivs(){}

    //  

    public static final Elivs INSTANCE = new Elivs();

  }

두 번째: 정적 방법으로 획득
public class Elivs{

    //  

    private Elivs(){}

    //  

    private static final Elivs INSTANCE = new Elivs();

    //     

    public static Elivs getInstance(){

       return instance();  

    } 

}

첫 번째 정적 영역을 통해 대상을 얻는 방식은 구성 클래스의 구성원들의 성명이 이 클래스가singleton이라는 것을 명확하게 나타내는 데 있다. 공유된 정적 영역은final이기 때문에 이 영역은 항상 같은 대상 인용을 포함할 것이다.
PS:
공유역은 성능에 있어서 아무런 장점도 없다. 현대의 JVM은 정적 공장 방법의 호출을 내연화할 수 있다.
 
두 번째 공장 방법의 장점은 그가 유연성을 제공하여 방법에서 더 많은 조작을 확장할 수 있고 API를 바꾸지 않는 전제에서 클래스를 Singleton으로 만드는지 여부를 바꿀 수 있다는 것이다.또한 공장 방법을 통해 대상을 얻으면, 대상을 만들 때의 확장을 위해 범형을 정의할 수 있습니다.
 
java1.5 다음에 사실은 세 번째 싱leton의 모델을 제공했는데 그것이 바로 Enum 매거 유형이다.
개별 요소가 포함된 열거 유형을 작성할 수 있습니다.
public enum Elvis{

     INSTANCE;

     

     public void leaveTheBuilding(){....}

}

이런 방식은 공유역 방법과 비슷하지만 더욱 간결하고 무상으로 서열화 메커니즘을 제공하여 여러 차례의 실례화를 절대 방지한다.

좋은 웹페이지 즐겨찾기