디자인 모델 의 단일 디자인 모델, 다 중 디자인 모델

13846 단어 JavaSE
1. 단일 디자인 모델
이른바 단일 디자인 모델 이란 하나의 실례 화 대상 만 생 성 할 수 있 는 유형 을 가리킨다.그렇다면 어떻게 한 가지 유형 이 하나의 실례 화 대상 만 생 긴 다 는 것 을 보증 합 니까?우 리 는 모든 클래스 가 기본적으로 무 참 구 조 를 생 성 한 다 는 것 을 잘 알 고 있 습 니 다. 이 무 참 구 조 는 외부 에서 마음대로 호출 할 수 있 습 니 다. 만약 에 우리 가 외부 에서 대상 이 생기 는 것 을 제한 하려 면 개인 적 인 구조 방법 을 스스로 쓸 수 있 습 니 다. 그러면 기본 적 으로 생 성 된 무 참 구 조 는 더 이상 발생 하지 않 습 니 다. 이때 대상 을 정례 화 할 때 잘못 보고 할 수 있 습 니 다.구조 방법 이 사유 화 되면 외부 에서 구 조 를 더 이상 호출 할 수 없 기 때문이다. 즉, 외부 에서 새로운 실례 화 대상 이 생 길 수 없 기 때문이다.하지만 이렇게 되면 상대 가 전혀 없다. 유일한 이 하 나 는 어떻게 만들어 야 할 까?private 는 클래스 내부 에서 만 호출 할 수 있 기 때문에 문 제 는 해결 되 고 우 리 는 하나의 사례 내부 에 좋 은 대상 Singleton singleton = new Singleton(); 을 제공 할 수 있 습 니 다.한편, 클래스 의 내부 속성 은 private 수식 을 사용 해 야 하고 getter () 방법 으로 되 돌아 가 야 합 니 다. 이때 또 하나의 문제 가 있 습 니 다. 이때 getter () 방법 은 일반적인 방법 입 니 다. 일반적인 방법 은 대상 을 사용 하여 호출 해 야 합 니 다. 그러나 클래스 의 외부 에는 대상 이 없습니다. 어떻게 해결 해 야 합 니까?사실 어렵 지 않 습 니 다. 우 리 는 static 을 사용 하여 이 getter () 방법 을 수식 하여 정적 방법 으로 만 들 수 있 습 니 다. 정적 방법 은 클래스 이름 으로 직접 호출 할 수 있 습 니 다. 그러면 모든 문 제 는 해 결 됩 니 다!(일반적으로 앞에서 final 키 워드 를 추가 하여 수정 하지 않 고 추가 하지 않 아 도 수정 되 지 않 습 니 다. 습관 일 뿐 입 니 다)
코드 는 다음 과 같 습 니 다:
//   
class Singleton{
    //            
    private static final Singleton singleton = new Singleton();    
    private Singleton(){}
    public static Singleton getInstance(){
        return singleton;
    }
}

public class SingletonDesignPattern {

    public static void main(String[] args) {
        Singleton singleton1 = Singleton.getInstance();
        Singleton singleton2 = Singleton.getInstance();
        System.out.println(singleton1 == singleton2);
    }

}

단일 디자인 모델 은 또 다른 '게으름뱅이 식 단일 모델' 도 있 는데 굶 주 린 한식 단일 모델 과 차이 가 어디 에 있 습 니까?사실은 대체적으로 똑 같 습 니 다. 다만 게으름뱅이 식 단일 모델 은 getter () 방법 을 처음 호출 할 때 new 대상 입 니 다.코드 는 다음 과 같 습 니 다:
//   
class Singleton{

    private static Singleton singleton;

    private Singleton(){}

    public static Singleton getInstance(){
        if(singleton == null){
            singleton = new Singleton();
        }
        return singleton;
    }
}

public class SingletonDesignPattern {

    public static void main(String[] args) {
        Singleton singleton1 = Singleton.getInstance();
        Singleton singleton2 = Singleton.getInstance();
        System.out.println(singleton1 == singleton2);
    }

}

그러나 게으름뱅이 식 단일 모드 에 스 레 드 안전 문제 가 존재 하고 다 중 스 레 드 가 동시에 발생 하 는 상황 에서 new 두 대상 이 생 겼 을 수 있 습 니 다.그럼 어떻게 해결 할 까요?이중 족쇄 단일 모드 라 는 단일 모드 가 있 습 니 다.
게으름뱅이 식 단일 모드 VS 굶 주 린 식 단일 모드:
굶 주 린 한식 단일 사례 모델 특징: 1. 처음부터 new 대상 이 사용 할 때 바로 돌아 갑 니 다.2. 구조 방법 은 사유 화 되 고 외부 에서 새로운 예화 대상 이 생 길 수 없 으 며 static 방법 으로 만 예화 대상 을 얻 을 수 있 습 니 다.게으름뱅이 식 단일 모델 특징: 1. 싱글 톤 대상 을 처음 사용 할 때 만 실례 화 대상 이 생 긴 다.2. 라인 이 안전 하지 않 음
2. 여러 가지 디자인 모델
이른바 다 례 란 단 례 보다 실례 화 대상 이 많 을 뿐 여전히 유한 한 개 수 대상 이다.
class Sex {
    private String title;
    public static final int MALE_FLAG = 1;
    public static final int FEMALE_FLAG = 2;
    private static final Sex MALE = new Sex(" ");
    private static final Sex FEMALE = new Sex(" ");
    private Sex(String title){
        this.title = title;
    }

    private Sex() {}

    public static Sex getInstance(int flag) {
        switch (flag) {
            case MALE_FLAG:
                return MALE;
            case FEMALE_FLAG:
                return FEMALE;
            default:
                return null;
        }
    }

    @Override
    public String toString() {
        return this.title;
    }
}

public class MultipleDesignPatterns {

    public static void main(String[] args) {
        Sex sex = Sex.getInstance(Sex.MALE_FLAG);
        Sex female = Sex.getInstance(Sex.FEMALE_FLAG);
        System.out.println(sex);
        System.out.println(female);
    }

}

여러 사례 든 단일 사례 든 다음 과 같은 공통점 이 있다. 1. 구조 방법 민영화 2. 유형 내 부 는 반드시 static 방법 을 제공 하여 실례 화 대상 을 얻 는 데 사용 할 것 이다.

좋은 웹페이지 즐겨찾기