싱글톤 패턴 디코딩

사용 시기


  • 응용 프로그램에는 클래스의 "하나의 인스턴스"만 필요합니다.
  • 인스턴스 생성을 완전히 제어하기 위해.



  • 의지



    클래스에 인스턴스가 하나만 있는지 확인하고 글로벌 액세스 지점을 제공하십시오.


    구성품


  • 싱글톤 클래스



  • 구조






    구현



    정적 인스턴스와 개인 생성자를 사용하여 Singleton 클래스를 만듭니다. 이 '전용' 인스턴스에 대한 액세스를 허용하는 정적 메소드를 제공하십시오.

    1 싱글톤 클래스 만들기

    package com.gaurav.singleton;
    
    public class Singleton {
    
      /* the singleton obj */
      private static Singleton instance = null;
    
      /* private constructor to avoid
         external instantiation of this class */
      private Singleton() {
      }
    
      /* method to get the singleton obj */
      public static Singleton getInstance() {
        if (instance == null) {
          synchronized (Singleton.class) {
            /* double checked locking */
            if (instance == null) {
              instance = new Singleton();
            }
          }
        }
        return instance;
      }
    
      public void printObj() {
        System.out.println("Unique Id of the obj: "
        + System.identityHashCode(this));
      }
    
    }
    


    2 싱글톤 인스턴스에 액세스

    class Demo {
    
      public static void main(String[] args) {
        Singleton obj1 = Singleton.getInstance();
        obj1.printObj();
        Singleton obj2 = Singleton.getInstance();
        obj2.printObj();
      }
    
    }
    


    산출




    Unique Id of the obj: 1916222108
    Unique Id of the obj: 1916222108
    



    이익


  • 제어된 인스턴스화
  • EAGER 및 LAZY 초기화를 모두 지원합니다
  • .
  • 싱글톤을 멀티톤으로 변환할 수 있음(키로 식별되는 제한된 수의 인스턴스 지원)



  • 단점


  • 싱글톤은 전역 변수와 유사하기 때문에 종종 '좋지 않은' 디자인으로 간주됩니다
  • .
  • Singleton 객체를 삭제해야 하는 경우 특수 처리가 필요함
  • 전역 상태를 유지하는 싱글톤이 문제를 일으킬 수 있음



  • 실제 사례


  • The Office of the President(대통령은 한 번에 한 명만 있을 수 있음)

  • 소프트웨어 예제


  • 로거 클래스
  • 창 관리자
  • 프린터 스풀러

  • 자바 SDK 예제



    java.lang.Runtime.getRuntime( )
    java.awt.Toolkit.getDefaultToolkit( )
    java.awt.Desktop.getDesktop( )
    java.util.logging.LogManager.getLogManager()
    java.lang.System#getSecurityManager( )


    더 논의하고 싶다
    Lets have a Coffee

    좋은 웹페이지 즐겨찾기