면접 관: 네가 아 는 단 례 모드 를 몇 가지 써 라!자바 가 단일 모드 를 실현 하 는 데 는 몇 가지 방식 이 있 습 니까?3,5?굶 주 린 놈, 게으름뱅이!?
19647 단어 디자인 모드
면접 에서 자주 사례 모델 의 문 제 를 만 날 수 있 습 니 다. 걸핏하면 몇 가지 사례 모델 을 알 고 있 습 니 다. 당신 이 알 고 있 는 사례 모델 을 손 으로 써 보 세 요. 이 문 제 를 철저히 해결 하기 위해 본 고 는 사례 모델 의 가장 완전한 8 가지 쓰기 와 회향 두 의 희 자의 네 가지 쓰기 (수 동 개 머리) 를 상세히 논술 하고 존재 하 는 우열 을 비교 하고 자 합 니 다.본문 이 도움 이 된다 면 좋아요, 뽀뽀.
본문 시작
응용 필드:
1. 예 를 들 어 윈도 우즈 의 자원 관리자, 같은 윈도 우즈 에서 두 개의 자원 관리 자 를 동시에 열 수 없습니다.
2. 데이터베이스 연결 탱크 는 데이터베이스 연결 이 일종 의 데이터베이스 자원 이기 때문에 데이터베이스 연결 을 열거 나 닫 는 데 발생 하 는 손실 을 절약 하기 위해 단일 모델 의 사용 이 특히 중요 하 다.
3. Spring 이 bean 에 대한 관 리 는 scope 를 통 해 이 bean 이 단일 예 (singleton) 인지 여러 예 (prototype) 인지 선택 할 수 있 습 니 다.
다시 말하자면 단일 모델 은 소프트웨어 공학 에서 사용 하 는 것 이 비교적 빈번 하 다. 면접 에서 면접 관 이 당신 을 마음 에 들 게 하고 업무 중 에 능숙 하 게 활용 할 수 있 도록 다음은 코드 방식 을 통 해 단일 모델 의 8 가지 실현 방식 을 상세 하 게 소개 한다.단일 모드 의 8 가지 실현 방식
단계:
① 사유 화 구조 기, 외부 통과 방지
new
인 스 턴 스 생 성② 같은 유형의 상수 를 제공 하여 내부 인 스 턴 스 를 받 을 수 있 습 니 다.
③ 생 성 된 인 스 턴 스 를 얻 기 위해 외부 호출 방법
public
을 제공 합 니 다.public class Singleton {
//1、 , new
private Singleton() {
}
//2、 Singleton , Singleton
private final static Singleton instance = new Singleton();
//3、 public ,
public static Singleton getInstance() {
return instance;
}
}
실현 이 비교적 간단 하고 상수, 즉 클래스 로 딩 할 때 실례 화 를 완성 하 는 것 으로 정의 된다.
ClassLoader
체 제 를 통 해 스 레 드 안전 문 제 를 피 했다.JVM
로 딩 류 의 방식 에 따 르 면 로 딩 기 는 특정한 종류 가 주동 적 으로 사 용 될 때 까지 기다 릴 필요 가 없다 는 것 을 알 게 되 었 다. JVM
로 딩 기 는 특정한 종류 가 사 용 될 것 이 라 고 예상 할 때 미리 불 러 올 수 있 기 때문에 로 딩 은 불확실 한 행위 이다. 이런 굶 주 린 방식 은 로 딩 할 때 정례 화 되 기 때문에 게 으 른 로 딩 에 이 르 지 못 한다.Lazy Loading
의 효과 입 니 다. 메모리 낭 비 를 초래 할 수 있 습 니 다.2. 굶 주 림 식 (정적 코드 블록)
단계:
① 사유 화 구조 기, 외부 통과 방지
new
인 스 턴 스 생 성②, 정의
static
인 스 턴 스 대상 은 정적 코드 블록 생 성 된 내부 인 스 턴 스 를 받 는 데 사 용 됩 니 다.③ 정적 코드 블록 을 통 해 대상 인 스 턴 스 생 성
④, 생 성 된 인 스 턴 스 를 얻 기 위해 외부 호출 방법
public
을 제공 합 니 다.public class Singleton {
//1、 , new
private Singleton(){
}
//2、
private static Singleton instance;
//3、
static {
instance = new Singleton();
}
//4、 public ,
public static Singleton getInstance(){
return instance;
}
}
단계:
① 사유 화 구조 기, 외부 통과 방지
new
인 스 턴 스 생 성②, 정의
static
인 스 턴 스 대상 은 정적 코드 블록 생 성 된 내부 인 스 턴 스 를 받 는 데 사 용 됩 니 다.③ 외부 호출 을 통 해 생 성 된 인 스 턴 스 를 얻 을 수 있 는
public
방법 을 제공 합 니 다. 먼저 이 인 스 턴 스 가 생 성 되 었 는 지 여 부 를 판단 하고 생 성 되 었 으 면 직접 사용 합 니 다. 그렇지 않 으 면 예화 되 어 생 성 됩 니 다. public class Singleton {
//1、 , new
private Singleton(){
}
//2、 static
private static Singleton instance;
//3、 public ,
public static Singleton getInstance(){
if (null == instance)
instance = new Singleton();
return instance;
}
}
간단 하고 게 으 른 로 딩 가능 (Lazy Loading)
if (null == instance)
이 코드 는 다 중 스 레 드 환경 에서 스 레 드 가 안전 하지 않 은 문제 가 존재 합 니 다. 여러 개의 인 스 턴 스 를 생 성하 여 단일 모델 을 파괴 할 수 있 습 니 다. 실제 개발 에 서 는 이러한 방식 을 사용 하지 마 십시오.4. 게으름뱅이 식 (스 레 드 안전, 동기 화 방법 실현)
단계:
① 사유 화 구조 기, 외부 통과 방지
new
인 스 턴 스 생 성②, 정의
static
인 스 턴 스 대상 은 정적 코드 블록 생 성 된 내부 인 스 턴 스 를 받 는 데 사 용 됩 니 다.③ 외부 호출 을 통 해 생 성 된 인 스 턴 스 를 얻 고
public
자 물 쇠 를 추가 하 는 synchronized
방법 을 제공 합 니 다. 먼저 이 인 스 턴 스 가 생 성 되 었 는 지 여 부 를 판단 하고 생 성 되 었 으 면 직접 사용 합 니 다. 그렇지 않 으 면 예화 되 어 생 성 됩 니 다. public class Singleton {
//1、 , new
private Singleton(){
}
//2、 static
private static Singleton instance;
//3、 public , synchronized ,
public static synchronized Singleton getInstance(){
if (null == instance)
instance = new Singleton();
return instance;
}
}
게으름뱅이 식 으로 라인 안전 문 제 를 해결 했다.
synchronized 잠 금 을 통 해 다 중 스 레 드 환경 에서 대상 의 인 스 턴 스 를 얻 는 효율 이 매우 낮 기 때문에 실제 개발 은 추천 하지 않 습 니 다.
5. 게으름뱅이 식 (스 레 드 가 안전 하지 않 고 동기 코드 블록 실현)
단계:
① 사유 화 구조 기, 외부 통과 방지
new
인 스 턴 스 생 성②, 정의
static
인 스 턴 스 대상 은 정적 코드 블록 생 성 된 내부 인 스 턴 스 를 받 는 데 사 용 됩 니 다.③ 외부 호출 에 Public 방법 을 정의 하고 synchronized 동기 코드 블록 에 자 물 쇠 를 추가 하여 인 스 턴 스 대상 을 가 져 옵 니 다.
public class Singleton {
//1、 , new
private Singleton(){
}
//2、 static
private static Singleton instance;
//3、 public , synchronized ,
public static Singleton getInstance(){
if (null == instance)
synchronized (Singleton.class){
instance = new Singleton();
}
return instance;
}
}
synchronized 코드 블록 잠 금 을 통 해 스 레 드 가 안전 하지 않 습 니 다. 실제 개발 은 추천 하지 않 습 니 다.
6. 이중 검사
단계:
① 사유 화 구조 기, 외부 통과 방지
new
인 스 턴 스 생 성②, 정의
volatile
인 스 턴 스 대상 은 인 스 턴 스 대상 의 가시 성 을 확보 하고 정적 코드 블록 생 성 된 내부 인 스 턴 스 를 수신 하 는 데 사 용 됩 니 다.③ Public 방법 을 정의 하여 외부 호출 에 제공 하고 인 스 턴 스 대상 을 가 져 오 는 동시에 내부 에서 두 번 판단 하고 두 번 째 는 synchronized 코드 블록 에 자 물 쇠 를 추가 합 니 다. 예화 에 성공 하면 잠 금 밖의 스 레 드 는
volatile
을 통 해 인 스 턴 스 를 얻 을 수 있 습 니 다. public class Singleton {
//1、 , new
private Singleton(){
}
//2、 volatile ,
private static volatile Singleton instance;
//3、 public , , synchronized
public static Singleton getInstance(){
if (null == instance)
synchronized (Singleton.class){
if (null == instance)
instance = new Singleton();
}
return instance;
}
}
게 으 른 로 딩 실현
Lazy Loading
이중 검사, 라인 안전 확보실례 화 코드 는 한 번 만 실행 하고 다 중 라인 뒤에 다시 접근 할 때
volatile
알림 을 통과 할 수 있 습 니 다.추천
7. 정적 내부 클래스
단계:
① 사유 화 구조 기, 외부 통과 방지
new
인 스 턴 스 생 성② 、 정적 내부 클래스 의 속성 을 통 해
Singleton
인 스 턴 스 획득③ 외부 호출 에 제공 하 는
public
방법 을 정의 하여 인 스 턴 스 대상 을 가 져 옵 니 다. public class Singleton {
//1、 , new
private Singleton(){
}
//2、 Singleton
private static class SingletonInstance{
private static Singleton INSTANCE = new Singleton();
}
//3、 public ,
public static Singleton getInstance(){
return SingletonInstance.INSTANCE;
}
}
게 으 른 로 딩 실현
Lazy Loading
getInstance()
방법 이 처음 호출 되 었 을 때 만 가상 컴퓨터 로 딩 SingletonInstance
류 를 초래 할 수 있 고, 클래스 의 정적 속성 은 첫 번 째 로 딩 류 를 초기 화 할 수 있 기 때문에 이러한 방식 은 JVM
의 로 딩 체 제 를 통 해 스 레 드 안전 을 확보 할 수 있다.추천
8. 매 거
단계:
①, 매 거 진 속성 을 통 해 이 루어 진다.
public enum Singleton {
INSTANCE;
public void hello(){
System.out.println("hello");
}
}
스 레 드 안전, 간단 실현
역 직렬 화 를 방지 하고 새로운 대상 을 다시 만 듭 니 다.
강력 추천 합 니 다.
총결산
단일 모드 는 시스템 메모리 에 한 개의 대상 만 존재 하고 시스템 자원 을 절약 할 수 있 음 을 보증 합 니 다. 자주 소각 해 야 하 는 대상 에 대해 단일 모드 를 사용 하면 시스템 성능 을 크게 향상 시 킬 수 있 습 니 다. 예 를 들 어 데이터 베이스 연결 탱크,
session
공장 등 입 니 다.윤회
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
디자인 모델 의 공장 모델, 단일 모델자바 는 23 가지 디자인 모델 (프로 그래 밍 사상/프로 그래 밍 방식) 이 있 습 니 다. 공장 모드 하나의 공장 류 를 만들어 같은 인 터 페 이 스 를 실현 한 일부 종 류 를 인 스 턴 스 로 만 드 는 것...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.