>  기사  >  Java  >  자바 싱글턴 패턴이 뭔가요?

자바 싱글턴 패턴이 뭔가요?

王林
王林원래의
2019-11-11 14:37:152585검색

자바 싱글턴 패턴이 뭔가요?

싱글턴 패턴이란 무엇인가요?

싱글턴 패턴은 클래스의 인스턴스가 싱글턴임을 보장하는 일반적인 디자인 패턴입니다.

싱글턴 모드의 장점:

(1) 우선 노출된 메소드를 통해 인스턴스가 아무리 자주 생성되더라도 생성된 객체는 동일한 인스턴스 객체임을 보장할 수 있습니다. 시스템 메모리

(2) 유연성. 모든 인스턴스 생성이 이 클래스에 의해 제어되므로 이 모든 클래스는 인스턴스화 프로세스를 유연하게 변경할 수 있습니다.

(3) 인스턴스 액세스 제어, 싱글톤 클래스가 액세스를 쉽게 제어할 수 있습니다.

싱글턴 모드의 단점:

(1) 싱글턴 모드에는 인터페이스가 없으며 확장이 쉽지 않습니다.

(2) 리플렉션 모드를 사용하면 싱글턴을 생성할 수 없습니다. , 그렇지 않으면 새로운 것이 인스턴스화됩니다.

(3) 게으른 싱글톤 모드를 사용할 때 스레드 안전 문제에 주의하세요.

싱글톤 모드 구현 방법:

Hungry 싱글톤 방법

package index;
public class Superman {
    //空的构造器
    private Superman(){}
    
    //实例化对象
    private static Superman supermanInstance = new Superman();
    
    //获取实例化对象的静态函数getSupermanInstance()
    public static Superman getSupermanInstance(){
        return supermanInstance;
    }
}

클래스가 로드될 때 배고픈 싱글톤 이것은 미리 새로운 것이며, 프로그램이 이 객체를 호출해야 하는지 여부에 관계없이 지연 로딩을 줄이기 위해 이미 준비되어 있습니다. 프로그램 로드에는 대부분의 경우 지연 로딩이 필요하므로 싱글톤을 구현하는 이 방법은 최선의 선택이 아닙니다.

Lazy 싱글톤 메소드(싱글 스레드 작성)

package index;
public class Superman {
    //空的构造器
    private Superman(){}

    //实例化对象;只声明 不使用new进行实例化
    private static Superman supermanInstance = null;

    //获取实例化对象的静态函数getSupermanInstance()
    public static Superman getSupermanInstance(){
        if(supermanInstance==null){ //如果为null的情况再进行实例化
            supermanInstance = new Superman();
        }
        return  supermanInstance;
    }
}

프로그램이 인스턴스화하지 않고 객체를 선언해야 할 경우 선언된 객체를 판단하는 정적 팩토리 메소드 getSupermanInstance()를 호출합니다. null인 경우 다시 인스턴스화합니다. 이 쓰기 방법은 지연된 로딩 효과를 얻을 수 있지만 스레드로부터 안전하지 않습니다. 동시에 정적 팩터리 메서드 getSupermanInstance()를 호출하는 두 개의 스레드가 있는 경우 이 클래스의 인스턴스는 싱글톤의 고유성을 파괴할 수 있습니다.

권장 튜토리얼: Java 튜토리얼

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

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