단일 모드 1, 2, 3.

단일 패턴으로 하는 일은 매우 간단하다. 바로 어떤 대상이 전체적으로 유일하다는 것을 보장하는 것이다.
맞습니까?옳고 그름은 기준에 달려 있다
단일 모드 (Singleton Pattern): 특정 클래스에 하나의 인스턴스만 있어야 하며 이를 전체 시스템에 직접 인스턴스화하여 제공합니다.
이 클래스는 단일 클래스라고 하는데, 전역 접근 방법을 제공합니다.단례 모드는 대상 창설 모드의 일종이다.
보아하니 내가 이전에 정의한 것이 전부 옳지 않은 것 같다.
첫 번째 보증류는 단지 하나의 실례일 뿐이다
두 번째 종류 자체는 스스로 실례화한다.
셋째, 전역 접근을 제공하는 방법
OK. 그러면 제가 이제 첫 번째 싱레톤을 써볼게요.

첫 번째 싱레톤.

public class Singleton{
    private static Singleton sl;
    private Singleton(){
       System.out.println(" ");
    }

    public static Singleton getInstance(){
    if(sl==null)
         sl=new Singleton();
     return sl;
    }
    
    public static void main(String[] args){
        Singleton sl=Singleton.getInstance();
        Singleton sl2=Singleton.getInstance();
    }
}
실행 결과 초기화 표시
그러나 여기에 문제가 하나 있습니다. 만약 여러 개의 라인이 이 코드를 동시에 실행한다면, 첫 번째 라인이sl=new Singleton () 으로 실행되었을 때 (이 문장은 아직 실행되지 않았습니다), 두 번째 라인이sl이null인지 확인하면 두 번째 라인도 들어옵니다.그리고 여러 상대가 생겼어요.
그래서

두 번째 싱레톤.

/***
 *  
 */
public class Singleton2{
    private final static Singleton2  sl2=new Singleton2();
    private Singleton2(){
        System.out.println(" ");
    }
    public static Singleton2 getInstance(){
        return sl2;
    }
    public static void main(String[] args){
        Singleton2 sl2=Singleton2.getInstance();
        Singleton2 sl3=Singleton2.getInstance();
    }
}
이런 단일 모드는 우리가 클래스를 불러올 때 클래스 변수를 new로 나온다.이런 방식을 우리는 굶주린 사람 모델이라고 부른다.
우선 굶주린 사람 문제가 위의 라인 문제를 해결했다.내가 처음 불러올 때 클래스 변수가 생겼고 하나밖에 없어서 당연히 라인 문제가 존재하지 않을 것이다.
그러나 여기에 성능 문제가 하나 있다. 내가 이 단일 클래스를 사용하든 안 사용하든 메모리에 항상 불러오기 때문에 성능이 문제다.
위에서 말한 이 모델을 굶주린 사람 모델이라고 하는데 당연히 비굶주린 사람 모델이 있다.하지만 여기서 나는 여러분과 게으름뱅이 모드를 이야기하고 싶지 않다. 너무 복잡하고 별로 쓰지 않는다.
첫 번째 라인 문제를 해결하고 성능을 유지할 수 있는 단례가 있습니까? (사실 두 번째 굶주린 사람 모드는 괜찮습니다. 그 종류만으로도 성능을 얼마나 끌 수 있습니까? 10개가 있어도 100개는 많지 않습니다.)그리고 내가 말한 그 게으름뱅이 모드처럼 복잡하지도 않은데?
답은 긍정적이다.있다!

내부 클래스 모드

public class Singleton3{
    private static class hold{
        private  final static Singleton3 sl3=new Singleton3();
    }
    private Singleton3(){
    System.out.println(" ");
    }
    public static Singleton3 getInstance(){
          return hold.sl3;
    }
    public static void main(String[] args){
             Singleton3 sl3=Singleton3.getInstance();
         Singleton3 sl4=Singleton3.getInstance();
         System.out.println(sl3==sl4);
    }
}
내부류와static,final에 대한 분석은 여기서 잠시 언급하지 않겠습니다.
내부류의 방식은 위에서 제기한 몇 가지 문제를 해결했다.
그런데 문제가 되지 않는 문제를 하나 끄집어냈어요.
내부 클래스는 자바에서 지원하지만 다른 언어에서는 반드시 그렇지는 않습니다.

참고 자료

http://blog.csdn.net/lovelion/article/details/7420883

좋은 웹페이지 즐겨찾기