단일 모드 - 다섯 가지 생 성 모드 중 하나
디자인 모델 은 일종 의 규범 으로 수많은 사람들 이 수백 수천 에 달 하 는 예 를 통 해 각종 상황 에서 의 처리 방식 을 정리 하고 이런 간단 한 코드 구조 로 농축 되 었 다.이런 모델 의 디자인 목적 에 따라 이들 을 세 가지 유형 으로 나 눌 수 있다. 즉, 창설 형 (5 가지), 구조 형 (7 가지) 과 행위 형 (11 가지) 이다.창설 형 은 말 그대로 대상 을 만 드 는 데 쓰 인 다.한편, 단일 모델 은 그 중에서 응용 이 가장 넓 고 최초의 디자인 모델 을 접 하 며 안 드 로 이 드 개발 에서 특히 현저 하 다.
2. 개념
단일 모델 은 전체 시스템 이 전체적인 대상 을 가지 고 자원 의 공유 와 시스템 행위 의 조 화 를 편리 하 게 할 수 있다.또한 인 스 턴 스 를 만 드 는 데 많은 자원 을 소모 해 야 할 때 한 번 에 여러 번 만 들 고 사용 하 는 것 이 좋 은 선택 입 니 다.단일 사례 모델 은 여러 가지 쓰기 방법 이 있 지만 이 네 가지 관건 은 가능 한 한 달성 해 야 한다. 첫 번 째 사용 해 야 실례 화 된다.다 중 스 레 드 지원;동기 화 지출 감소;역 직렬 화 시 대상 이 다시 생 성 되 는 것 을 피하 다.
3. 장면
유명한 패션 디자이너 가 자신의 독특한 디자인 스타일 로 여러 의 류 기업 과 장기 적 인 합작 관 계 를 맺 었 다.새로운 시즌 이 왔 을 때, 그들 은 모두 이 디자이너 에 게 연락 해서, 그 가 자신의 기업 디자인 을 도와 주 기 를 바란다.
4. 쓰기
//
public class Designer {
// 1.
private static Designer mInstance;
// 2.
private Designer() {
}
public void design() {
System.out.println(" ");
}
// 3.
public static synchronized Designer getInstance() {
if (mInstance == null) {
mInstance = new Designer();
}
return mInstance;
}
}
public class Company {
public static void main(String[] args) {
//
Designer.getInstance().design();
}
}
이런 방식 은 방금 말 한 네 가지 관건 중 두 가 지 를 만족 시 킬 수 있 지만 매번 인 스 턴 스 를 얻 을 때마다 동기 화 를 해서 불필요 한 동기 화 비용 을 초래 해 야 한다.그리고 역 직렬 화 할 때 도 새로운 인 스 턴 스 를 만 듭 니 다.그래서 다음 과 같이 수정 합 니 다.
//
public class Designer {
// 1.
private static Designer mInstance;
// 2.
private Designer() {
}
public void design() {
System.out.println(" ");
}
// 3.
public static Designer getInstance() {
// 4.
if (mInstance == null) {
synchronized (Designer.class) {
if (mInstance == null) {
mInstance = new Designer();
}
}
}
return mInstance;
}
}
게으름뱅이 동기 화 비용 문 제 는 해 결 됐 지만 코드 구조 가 복잡 해 이해 하기 어렵다.우 리 는 다음 에 자바 의 메커니즘 을 이용 하여 단일 모드 를 쓴다.
//
public class Designer {
// 1.
private Designer() {
}
public void design() {
System.out.println(" ");
}
// 2.
public static Designer getInstance() {
return Holder.mInstance;
}
// 3.
private static class Holder {
// 4.final
private static final Designer mInstance = new Designer();
}
}
현재 코드 는 이미 비교적 완선 되 었 지만 반 직렬 화 된 새로운 대상 을 만 드 는 문 제 는 아직 해결 되 지 않 았 다. 그러면 자바 체제 가 해결 할 수 있 는 지 다시 한번 보 자.
//
public enum Designer {
//
INSTANCE;
public void design() {
System.out.println(" ");
}
}
public class Company {
public static void main(String[] args) {
Designer.INSTANCE.design();
}
}
매 거 진 실례 의 생 성 은 기본적으로 라인 이 안전 하고 반 서열 화도 새로운 실례 를 생 성하 지 않 기 때문에 위 에서 말 한 네 가지 관건 을 완벽 하 게 해결 했다.
5. 총화
모 바 일 클 라 이언 트 는 보통 높 은 병발 상황 이 없고 단일 대상 에 대해 역 직렬 화 되 지 않 기 때문에 어떤 방식 이 든 가능 합 니 다.그러나 주의해 야 할 것 은 단일 대상 이 Context 를 가지 고 있다 면 응용 프로그램 Context 가 가장 좋 고 그렇지 않 으 면 메모리 가 새 기 쉽다 는 것 이다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.