JavaRush /Java Blog /Random-KO /자신의 말로 표현한 싱글톤 패턴
Roman_kh
레벨 33
Харьков

자신의 말로 표현한 싱글톤 패턴

Random-KO 그룹에 게시되었습니다

안녕하세요 여러분, javaRush!

Singleton오늘은 디자인 패턴 (싱글) 에 대해 말씀드리겠습니다 . 자신의 말로 표현한 싱글톤 패턴 - 1목표: 객체가 하나만 있는 클래스를 만듭니다. 즉, 액세스 횟수에 관계없이 처음 생성된 동일한 객체가 반환됩니다. 이는 편리하고 많은 곳에서 필요한 일이며, 프레임워크에 구현되는 것은 아무것도 아닙니다. 애플리케이션:
  • 예를 들어, 데이터베이스를 프로젝트 및 해당 연결을 담당할 클래스에 연결해야 합니다. 연결은 한 번 생성되며 다시 생성할 필요가 없습니다.
  • Application settings— 애플리케이션에 필요한 연결 설정(데이터베이스 호스트 및 포트 등)을 담당하는 클래스입니다. 한 번 생성되어 애플리케이션 작업 전반에 걸쳐 사용됩니다.
  • 제가 언급하지 않은 예시가 더 많이 있으므로 댓글에 옵션을 적어주세요! =)
이 소개 후에 제가 이해하는 바에 따르면 이 클래스의 예를 보여줄 수 있습니다. (비록 우리 각자가 이것을 구현할 수 있다고 확신하지만) 다음은 생성자를 비공개로 만드는 가장 간단한 예입니다. 명시적으로 개체를 만들 수는 없습니다. getInstance()그리고 객체를 제공하는 정적 메서드가 있습니다 .
public class Singleton {
  private static Singleton instance;
  private Singleton () {}

  public static Singleton getInstance() {
    if (instance == null) {
      instance = new Singleton();
    }
    return instance;
  }
}
멀티스레딩에 문제가 있는 경우 getInstance()마커 메소드를 넣을 수 있습니다 synchronized.
public class Singleton {
  private static Singleton instance;
  private Singleton () {}

  public static synchronized Singleton getInstance() {
    if (instance == null) {
      instance = new Singleton();
    }
    return instance;
  }
}
마지막으로 평소와 마찬가지로 생각이 다르시거나 제게 틀린 부분이 있다면 댓글로 적어주세요! 모든 것을 즐겁게 논의하겠습니다 :) 기사가 마음에 드셨다면 "+"를 적어주시면 알려드리겠습니다. 이것은 나에게 중요합니다 :) 추신: 더 많은 구현을 추가하고 있습니다. Joshua Bloch 에 따르면 이것이 템플릿을 구현하는 가장 좋은 방법입니다.Enum Singleton
public enum Singleton {
   INSTANCE;
}
Double Checked Locking & volatile
public class Singleton {
        private static volatile Singleton instance;

        public static Singleton getInstance() {
      Singleton localInstance = instance;
      if (localInstance == null) {
         synchronized (Singleton.class) {
            localInstance = instance;
            if (localInstance == null) {
               instance = localInstance = new Singleton();
            }
         }
      }
      return localInstance;
   }
}
그리고 더 나아가 On Demand Holder idiom:
public class Singleton {

   public static class SingletonHolder {
      public static final Singleton HOLDER_INSTANCE = new Singleton();
   }

   public static Singleton getInstance() {
      return SingletonHolder.HOLDER_INSTANCE;
   }
}
+지연 초기화 +고성능 -비정적 클래스 필드에는 사용할 수 없습니다. 질문/제안 사항이 있으면 의견을 적어주세요! 내 다른 기사도 참조하십시오.
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION