디자인 모델 의 단일 디자인 모델, 다 중 디자인 모델
13846 단어 JavaSE
이른바 단일 디자인 모델 이란 하나의 실례 화 대상 만 생 성 할 수 있 는 유형 을 가리킨다.그렇다면 어떻게 한 가지 유형 이 하나의 실례 화 대상 만 생 긴 다 는 것 을 보증 합 니까?우 리 는 모든 클래스 가 기본적으로 무 참 구 조 를 생 성 한 다 는 것 을 잘 알 고 있 습 니 다. 이 무 참 구 조 는 외부 에서 마음대로 호출 할 수 있 습 니 다. 만약 에 우리 가 외부 에서 대상 이 생기 는 것 을 제한 하려 면 개인 적 인 구조 방법 을 스스로 쓸 수 있 습 니 다. 그러면 기본 적 으로 생 성 된 무 참 구 조 는 더 이상 발생 하지 않 습 니 다. 이때 대상 을 정례 화 할 때 잘못 보고 할 수 있 습 니 다.구조 방법 이 사유 화 되면 외부 에서 구 조 를 더 이상 호출 할 수 없 기 때문이다. 즉, 외부 에서 새로운 실례 화 대상 이 생 길 수 없 기 때문이다.하지만 이렇게 되면 상대 가 전혀 없다. 유일한 이 하 나 는 어떻게 만들어 야 할 까?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 방법 을 제공 하여 실례 화 대상 을 얻 는 데 사용 할 것 이다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Object 클래스의 equals 메서드 및 hashcode 메서드 분석자반성: 임의의 비공식 인용값 x에 대해 x.equals(x)true 의 대칭성: 임의의 비공식 인용값 x와 y에 대해 x.equals(y)true를 되돌려주고 y.equals(x)도true 전달성: 임의의 비공식 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.