> Java > java지도 시간 > Java 생성 디자인 패턴의 싱글톤 패턴을 구현하는 방법

Java 생성 디자인 패턴의 싱글톤 패턴을 구현하는 방법

PHPz
풀어 주다: 2023-05-15 10:49:05
앞으로
829명이 탐색했습니다.

소개

싱글턴 패턴은 창조적인 디자인 패턴입니다. 주요 기능은 다음과 같습니다.

  • 단 하나의 인스턴스: 싱글턴 패턴은 시스템에 하나의 인스턴스 개체만 존재하고 개체에 대한 모든 액세스가 동일하도록 보장합니다. 개체에 대한 참조

  • 싱글턴 모드는 인스턴스 개체에 전역적으로 액세스하여 여러 개체 간의 충돌과 경쟁을 피할 수 있습니다.

  • 지연 초기화: 싱글톤 모드는 일반적으로 지연 초기화 기술을 사용하며 생성이 필요합니다. 필요할 때만 싱글톤 개체를 사용하여 불필요한 리소스 낭비와 성능 손실을 피하고 싱글톤 개체의 정확성과 신뢰성을 보장합니다

  • 스레드 안전성: 싱글톤 모드는 멀티 스레드에서 획득을 보장하기 위해 스레드 안전성 문제를 고려해야 합니다. 인스턴스 개체는 마찬가지로 멀티 스레드 간의 경쟁과 충돌을 피합니다

장점

  • 객체 관리 및 유지 관리를 용이하게 하는 전역적으로 고유한 인스턴스를 제공합니다.

  • 객체 생성 및 파괴를 줄이고 시스템 성능을 향상합니다.

  • 여러 인스턴스 간의 경쟁과 충돌을 방지하여 개체 상태의 일관성과 안정성을 보장합니다.
  • 시스템 리소스 낭비 및 남용을 방지하기 위해 시스템에서 특정 클래스의 인스턴스 수를 제어할 수 있습니다.
  • 구현을 용이하게 합니다. 스레드 안전성, 직렬화, 반사 및 기타 기능을 사용하여 객체의 신뢰성과 보안을 향상시킵니다.
  • 단점

    싱글톤 모드는 코드의 복잡성을 증가시키고 시스템의 복잡성을 증가시킵니다. 유지 관리의 어려움과 코드 테스트 어려움
  • 싱글턴 모드는 싱글턴 객체의 수명 주기를 너무 길어서 객체가 제때에 해제되지 않아 시스템 성능에 영향을 줄 수 있습니다.
  • 싱글턴 모드가 남용될 수 있습니다. 결과적으로 시스템에 싱글톤 개체가 너무 많아 시스템 리소스 점유가 증가하고 관리가 어려워집니다. 특히 멀티 스레드 환경에서는 싱글톤 개체를 보장하기 위한 특별한 구현 방법이 필요합니다. . 멀티스레드 환경에서는 안전합니다.
  • package com.fanqiechaodan.singleton.singleton1;
    /**
     * @Classname Singleton
     * @Description
     */
    public class Singleton {
        private static final Singleton INSTANCE = new Singleton();
        private Singleton(){
            // 私有构造函数
        }
        public static Singleton getInstance(){
            return INSTANCE;
        }
    }
    로그인 후 복사

    Lazy style

  • 이 방법에서는 멀티스레드 환경에서 처음 사용할 때 싱글톤 인스턴스를 생성합니다.
  • package com.fanqiechaodan.singleton.singleton2;
    /**
     * @Classname Singleton
     * @Description
     */
    public class Singleton {
        private static volatile Singleton instance;
        private Singleton() {
            // 私有构造函数
        }
        public static Singleton getInstance() {
            if (instance == null) {
                synchronized (Singleton.class) {
                    if (instance == null) {
                        instance = new Singleton();
                    }
                }
            }
            return instance;
        }
    }
    로그인 후 복사

    Static inner class

  • 이 방법은 Java의 클래스 로딩 메커니즘을 활용합니다. Singleton 인스턴스는 SingletonHolder 클래스에 처음 액세스할 때만 로드됩니다. 메소드는 스레드 안전성을 보장할 뿐만 아니라 지연 로딩도 달성합니다
package com.fanqiechaodan.singleton.singleton3;
/**
 * @Classname Singleton
 * @Description
 */
public class Singleton {
    private Singleton(){
        // 私有构造函数
    }
    public static Singleton getInstance(){
        return SingletonHolder.INSTANCE;
    }
    private static class SingletonHolder{
        private static final Singleton INSTANCE = new Singleton();
    }
}
로그인 후 복사

Enumeration

열거형 유형을 사용하면 스레드로부터 안전한 싱글톤 모드를 매우 편리하게 구현할 수 있습니다. 열거형은 정의될 때 생성되므로 스레드로부터 안전하며 하나만 갖습니다. instance.

package com.fanqiechaodan.singleton.singleton4;
/**
 * @Classname Singleton
 * @Description
 */
public class Singleton {
    private Singleton() {
        // 私有构造函数
    }
    static enum SingletonEnum {
        /**
         * 枚举实例
         */
        INSTANCE;
        private Singleton singleton;
        /**
         * 私有构造函数,确保只有一个实例
         */
        private SingletonEnum() {
            singleton = new Singleton();
        }
        private Singleton getSingleton() {
            return singleton;
        }
    }
    /**
     * 对外暴露一个获取Singleton对象的静态方法
     *
     * @return
     */
    public static Singleton getInstance() {
        return SingletonEnum.INSTANCE.getSingleton();
    }
}
로그인 후 복사

Hungry Man 지연 스타일 구현은 간단하지만 지연 로딩을 지원하지 않습니다. 애플리케이션이 시작되면 인스턴스 객체가 생성됩니다. 지연 스타일은 지연 로딩을 지원하지만 사용이 필요합니다. 이중 확인 잠금 메커니즘이 있으며 코드가 더 복잡합니다. 정적 내부 클래스는 지연 로딩도 지원하는 간단하고 스레드로부터 안전한 구현 방법입니다. 열거형 유형은 가장 간단한 싱글톤 구현 방법이며 가장 안전합니다. 스레드 안전성 문제를 고려할 필요가 없으며 지연 로딩도 지원합니다.

일반적으로 열거형 싱글톤 모드는 대부분의 싱글톤 모드의 요구 사항을 충족할 수 있는 간단하고 효율적이며 스레드로부터 안전한 싱글톤 구현 방법입니다. 개발 시, 싱글톤 패턴을 구현하려면 열거형 싱글톤 패턴을 사용하는 것이 좋습니다.

위 내용은 Java 생성 디자인 패턴의 싱글톤 패턴을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:yisu.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿