[Java 디자인 모드] 단일 모드
3145 단어 java 디자인 모드
소개하다.
단례 모델은 흔히 사용하는 소프트웨어 디자인 모델로 그 정의는 단례 대상의 클래스가 하나의 실례만 존재할 수 있도록 허용하는 것이다.
많은 경우 전체 시스템은 하나의 전체적인 대상만 가지면 시스템 전체의 행위를 조율하는 데 유리하다.예를 들어 어떤 서버 프로그램에서 이 서버의 설정 정보는 하나의 파일에 저장되고 이러한 설정 데이터는 하나의 단일 대상이 통일적으로 읽은 다음에 서비스 프로세스의 다른 대상이 이 단일 대상을 통해 이러한 설정 정보를 얻는다.이런 방식은 복잡한 환경에서 배치 관리를 간소화시켰다.
For example, 바로 하나의 왕국(Kingdom) 안에 한 명의 왕(King)만 있어야 하고, 매번 왕을 호출할 때마다 같은 왕이어야 한다.
기본적인 실현 방향
하나의 클래스에 대해 매번 하나의 실례만 있을 수 있습니다. 이것은 하나의 예시 모드에서 클래스가 대상의 인용 (영원히 같은 것) 과 이 실례를 얻을 수 있는 방법 (정적 방법이어야 합니다. 보통 getInstance라는 이름을 사용합니다.) 을 되돌려 주어야 합니다.
단일 사례의 실현은 주로 다음과 같은 두 가지 절차를 거친다.
하나의 클래스에 대해 매번 하나의 실례만 있을 수 있습니다. 이것은 하나의 예시 모드에서 클래스가 대상의 인용 (영원히 같은 것) 과 이 실례를 얻을 수 있는 방법 (정적 방법이어야 합니다. 보통 getInstance라는 이름을 사용합니다.) 을 되돌려 주어야 합니다.
단일 사례의 실현은 주로 다음과 같은 두 가지 절차를 거친다.
일반적인 실현 방식
굶주리다
public class Singleton {
private final static Singleton INSTANCE = new Singleton();
private Singleton(){}
public static Singleton getInstance(){
return INSTANCE;
}
}
그럼요. 이것도 정적 코드 블록을 쓸 수 있어요.
2 게으름뱅이식(이중 검사)
public class Singleton {
private static volatile Singleton singleton;
private Singleton() {}
public static Singleton getInstance() {
if (singleton == null) {
synchronized (Singleton.class) {
if (singleton == null) {
singleton = new Singleton();
}
}
}
return singleton;
}
}
3 정적 내부 클래스
public class Singleton {
private Singleton() {}
private static class SingletonInstance {
private static final Singleton INSTANCE = new Singleton();
}
public static Singleton getInstance() {
return SingletonInstance.INSTANCE;
}
}
이런 방식은 굶주린 사람식 방식이 채택한 메커니즘과 유사하지만 또 다르다.둘 다 클래스 마운트 메커니즘을 사용해서 초기화 실례가 하나의 라인만 있을 수 있도록 보장한다.다른 점은 아사자식 방식은 싱leton류가 적재되면 실례화되고 레이지-Loading의 작용이 없으며 정적 내부 클래스는 싱leton류가 적재될 때 즉각 실례화되지 않고 실례화가 필요할 때 getInstance 방법을 호출해야 싱letonInstance류를 적재하여 싱leton의 실례화를 완성할 수 있다.
클래스의 정적 속성은 클래스를 처음 불러올 때만 초기화됩니다. 따라서 여기서 JVM은 루트의 안전성을 확보하고 클래스를 초기화할 때 다른 루트는 들어갈 수 없습니다.
장점: 라인이 안전하지 않고 적재 지연을 피하며 효율이 높습니다.
4 매거
public enum Singleton {
INSTANCE;
public void whateverMethod() {
}
}
JDK1의 도움을 받다.5에 추가된 매거진으로 단일 모드를 실현합니다.다중 루틴 동기화 문제를 피할 수 있을 뿐만 아니라, 새로운 대상을 반서열화하는 것도 방지할 수 있다.JDK1에 일일이 들었기 때문일 수도 있어요.5에 첨가되기 때문에 실제 프로젝트 개발에서 이렇게 쓴 적이 드물다.
장점
시스템 메모리에 이 클래스는 하나의 대상만 존재하기 때문에 시스템 자원을 절약하고 자주 폐기해야 하는 대상에 대해 단일 모드를 사용하면 시스템 성능을 향상시킬 수 있다.
결점
하나의 단일 클래스를 실례화하려면 new를 사용하지 않고 대상을 얻는 방법을 기억해야 한다. 특히 원본을 볼 수 없을 때.
적용 장소
public class Singleton {
private final static Singleton INSTANCE = new Singleton();
private Singleton(){}
public static Singleton getInstance(){
return INSTANCE;
}
}
public class Singleton {
private static volatile Singleton singleton;
private Singleton() {}
public static Singleton getInstance() {
if (singleton == null) {
synchronized (Singleton.class) {
if (singleton == null) {
singleton = new Singleton();
}
}
}
return singleton;
}
}
public class Singleton {
private Singleton() {}
private static class SingletonInstance {
private static final Singleton INSTANCE = new Singleton();
}
public static Singleton getInstance() {
return SingletonInstance.INSTANCE;
}
}
public enum Singleton {
INSTANCE;
public void whateverMethod() {
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
어댑터(클래스 어댑터, 객체 어댑터 모드)1: 클래스 어댑터 모드 만일 우리가 Person류가 있다면, 이 Person류에는 불고 당기는 방법이 있다.시스템 개발의 절반에 이르러 우리는 이 종류에 두 가지 방법을 더 첨가하여 연주, 당기기, 연주, 노래의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.