>  기사  >  Java  >  자바 싱글턴 패턴에 대한 자세한 설명

자바 싱글턴 패턴에 대한 자세한 설명

巴扎黑
巴扎黑원래의
2017-09-18 11:32:401173검색

이 글은 주로 자바 싱글턴 모드(Hungry Man 모드와 게으른 맨 모드) 관련 정보를 소개합니다. 필요한 친구들은

java 싱글턴 모드를 참고하세요.

Hungry-style 싱글턴

Hungry-Han 패턴의 경우 다음과 같이 이해할 수 있습니다. 싱글턴 클래스는 매우 배가 고프고 급히 식사를 해야 하므로 클래스가 로드되는 즉시 객체를 생성합니다.

게으른 싱글톤 클래스

게으른 모델의 경우 다음과 같이 이해할 수 있습니다. 이 싱글톤 클래스는 매우 게으르고 필요할 때만 작동하며 미리 준비하는 방법을 전혀 모릅니다. 객체가 필요할 때만 객체가 있는지 확인하고, 객체가 없으면 즉시 객체를 생성한 후 반환합니다.

싱글턴 디자인 패턴은 JDBC 링크 데이터베이스에서 자주 사용됩니다

참고:

1 우리는 일반적으로 첫 번째 배고픈 중국 스타일을 사용합니다. 그 이유는 다음과 같습니다.

(1) 싱글턴 디자인 패턴이 채택되었기 때문에 싱글톤 클래스의 객체를 사용하려면 먼저 인스턴스화하세요.

(2) 게으른 스타일에는 동기화 키워드를 추가해야 합니다. 그렇지 않으면 싱글톤이 없지만 추가하면 됩니다. 동기화하면 효율성이 약간 떨어집니다

2 첫 번째 방법에서는 코드 private static final Single SINGLE=new Single(); 왜 final이 있나요?

final 키워드로 수정된 클래스는 상속할 수 없기 때문에 멤버는 final에 의해 수정된 변수는 수정할 수 없습니다.

Final은 "동일한 객체"라는 개념을 강화하고 강조하기 위해 사용됩니다. - 그러한 객체만 있으며 수정할 수 없습니다. Single SINGLE을 final로 수정하면 상황이 발생합니다. 비즈니스가 매우 복잡하고 이 개체가 실수로 수정되어 다양한 오류가 발생합니다.

첫 번째(배고픈 중국 스타일):

아이디어:

(1) 다른 클래스가 이 클래스의 객체를 생성하지 못하게 하세요. 즉, 생성자를 비공개로 설정하세요!
(2) 이 클래스의 객체를 사용자 정의합니다.

(3) 사용자 정의된 객체를 제공합니다. 즉, get 메서드를 정의하고 반환 값은 이 클래스의 객체입니다.



분석:

첫 번째 단계: 싱글톤 클래스의 생성자를 사유화하고 get() 함수를 사용하여 해당 객체를 외부에 제공하므로 다른 클래스가 해당 객체를 생성할 수 없습니다.
2단계: 그러나 다른 클래스가 이 싱글톤 클래스의 메서드를 호출하려는 경우 내부 이름.메서드 이름()만 사용하여 구현할 수 있으며, 이를 위해서는 이 메서드가 정적이어야 합니다.

3단계: 정적 메서드는 정적 멤버에만 액세스할 수 있기 때문입니다! 따라서 SINGLE을 static으로 설정하세요



public class SingleDemo { 
  public static void main(String[] args) { 
     Single s1=Single.getSingle(); 
     s1.setNumber(44); 
     Single s2=Single.getSingle(); 
     s2.setNumber(55); 
     System.out.println("s1.number="+s1.number); 
     System.out.println("s2.number="+s2.number); 
     if(s1.equals(s2)){ 
        System.out.println("s1与s2是同一对象即:s1==s2");//if条件成立 
       } 
   } 
} 
 
 
class Single{ 
  int number; 
  public int getNumber() { 
       return number; 
     } 
  public void setNumber(int number) { 
       this.number = number; 
     } 
  private Single(){};//第一步 
  private static final Single SINGLE=new Single();//第三步 
  public static Single getSingle(){//第一步和第二步 
       return SINGLE; 
  } 
}


두 번째(게으른 스타일):


package cn.com; 
public class SingleDemo2 { 
   public static void main(String[] args) { 
      Single s1=Single.getSingle(); 
      s1.setNumber(44); 
      Single s2=Single.getSingle(); 
      s2.setNumber(55); 
      System.out.println("s1.number="+s1.number); 
      System.out.println("s2.number="+s2.number); 
      if(s1.equals(s2)){ 
        System.out.println("s1与s2是同一对象即:s1==s2");//if条件成立 
       } 
     } 
 
 
} 
 
 
class Single{ 
   int number; 
   public int getNumber() { 
       return number; 
     } 
   public void setNumber(int number) { 
       this.number = number; 
     } 
   private Single(){}; 
   private static Single SINGLE=null; 
   public static synchronized Single getSingle(){//多线程时加上synchronized是关键!!! 
      if(SINGLE==null){ 
         SINGLE=new Single(); 
         return SINGLE; 
       } 
      else{ 
         return SINGLE; 
        } 
   } 
}

위는 Java 싱글턴 디자인 패턴에 대한 자세한 설명입니다. 궁금한 점이 있으면 메시지를 남겨주세요. 이 페이지로 이동 사이트 커뮤니티는 소통하고 토론합니다. 읽어주셔서 감사합니다. 모두에게 도움이 되기를 바랍니다. 이 사이트를 지원해 주셔서 감사합니다!

위 내용은 자바 싱글턴 패턴에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.