Java는 싱글 톤 디자인 패턴 생성 유형을 구현합니다.

창조 유형

1. 싱글 톤 디자인 패턴
2. 공장 디자인 패턴
3. 빌더 디자인 패턴
4. 프로토 타입 디자인 패턴

구조 유형

5. 에이전시 디자인 패턴
6, 브리징 디자인 패턴
7, 장식 디자인 패턴
8, 어댑터 디자인 패턴
9, 외관 디자인 패턴
10, 플라이 웨이트 디자인 패턴
11, 조합 디자인 패턴

행동

12. 템플릿 디자인 모드

소개

싱글 톤 디자인 패턴은 해결하기 매우 간단합니다. 클래스는 하나의 객체 (또는 인스턴스) 만 생성 할 수 있으며,이 클래스는 싱글 톤 클래스입니다.이 디자인 패턴을 싱글 톤 디자인 패턴 또는 줄여서 싱글 톤 패턴이라고합니다.

싱글 톤을 구현할 때 고려해야 할 일반 조건 :

1. 생성자는 private로 데코 레이팅되고 액세스 권한은 new를 통한 인스턴스 (객체)의 외부 생성을 방지하기 위해 사용됨
2. 객체 생성시 스레드 안전성 고려
3. 지연 로딩 지원
여부 고려 4. getInstance () 성능이 높은지 고려 (잠금 여부).

실현하는 방법

싱글 톤 모드 : 배고픈 사람, 게으른 사람, 재확인, 정적 내부 클래스, 열거;

1. 배고픈 중국어

public class Setting {
    private static final Setting mSetting= new Setting();

    private Setting() {
    }

    public static Setting getInstance() {
        return mSetting;
    }
}

단점 : 클래스가로드되면 mSetting의 정적 인스턴스가 생성되고 초기화되었습니다. 지연로드는 지원되지 않습니다 (필요할 때 싱글 톤 객체 생성).

장점 : mSetting 인스턴스의 생성 프로세스는 스레드로부터 안전합니다 (클래스 로딩 중에 정적 mSetting 인스턴스가 이미 초기화되었으므로 mSetting 인스턴스의 생성은 스레드로부터 안전합니다)
2, lazy

public class Setting {
    private static Setting mSetting;

    private Setting() {
    }

    public static synchronized Setting getInstance() {
        if (mSetting == null) {
            mSetting = new Setting();
        }
        return mSetting;
    }
}

단점 : getInstance ()는 잠금을 추가합니다. 자주 호출하면 효율성이 매우 낮아 (매번 잠금 및 해제) 동시성 (1)이 매우 낮아집니다.

장점 : 지연로드 가능;

3. 이중 감지

public class Setting {
    private static Setting mSetting;

    private Setting() {
    }

    public static  Setting getInstance() {
        if (mSetting == null) {
            synchronized (Setting.class) {
                if (mSetting == null) {
                    mSetting = new Setting();
                }
            }
        }
        return mSetting;
    }
}

장점 : 지연로드와 높은 동시성이 모두 지원됩니다.

4. 정적 내부 클래스

public class Setting {

    private Setting() {
    }

    private static class SettingHolder{
        private static final Setting mSetting = new Setting();
    }


    public static Setting getInstance() {
        return SettingHolder.mSetting;
    }
}

장점 : 스레드 안전성을 보장하면서 지연로드도 수행됩니다 .Setting 클래스가로드되면 정적 내부 클래스 SettingHolder가 생성되지 않고 getInstance ()가 호출 될 때만로드됩니다 .mSetting의 고유성, 생성 프로세스의 스레드 안전성 성능은 JVM에 의해 보장됩니다.

5. 열거

public enum  Setting{
    INSTANCE
}

요약 : 위의 다섯 가지 구현은 모두 스레드로부터 안전합니다.

추천

출처blog.csdn.net/ezconn/article/details/106507491