디자인 모드 의 단일 예 모드 (Singleon Patttern)
Ensure a class has only one instance, and provide a global point of access to it. 하나의 인 스 턴 스 만 있 는 지 확인 하고 이 인 스 턴 스 를 얻 을 수 있 는 방법 을 제공 합 니 다.
1. 굶 주 린 한식
package ;
public class EagerSingleton {
private static final EagerSingleton instance= new EagerSingleton();
private EagerSingleton(){}
//
public static EagerSingleton getInstance(){
return instance;
}
}
EagerSingleton 클래스 가 불 러 올 때 정적 변수 인 스 턴 스 가 초기 화 됩 니 다.
2. 게으름뱅이 식
package ;
public class LazySingleton {
private static LazySingleton instance =null;
private LazySingleton(){}
synchronized public static LazySingleton getInstance(){
if(instance==null){
instance=new LazySingleton();
}
return instance;
}
}
게으름뱅이 식 의 getInstance () 방법 은 동기 화 를 사용 하여 다 중 스 레 드 환경 에서 여러 개의 인 스 턴 스 가 나타 나 지 않도록 합 니 다.그러나 주의해 야 할 것 은 하나의 사례 모델 이 모든 상황 에서 하나의 사례 를 실현 할 수 있다 는 것 을 보장 할 수 없다 는 것 이다. 예 를 들 어 여러 개의 가상 컴퓨터 나 여러 개의 유형의 로 더 의 상황 에서 하나 이상 의 사례 가 발생 할 수 있 고 구체 적 인 상황 은 여 기 를 참고 할 수 있다. 만약 에 영문 을 보고 싶 지 않 으 면 중국어 번역 이 있다.
public enum Singleton {
INSTANCE;//
public void print() {
System.out.println(" enum ");
}
// public static Singleton getInstance() {
// return INSTANCE;
// }
public static void main(String[] args) {
// Singleton sole=Singleton.getInstance();
Singleton sole = Singleton.INSTANCE;
sole.print();
}
}
http://blog.sina.com.cn/s/blog_3fe961ae 0100 ouwg. html 이것 은 사실 비교적 trick 한 방법 으로 라 는 책 에서 작 가 는 강력 히 추천 했다.몇 년 동안 enum 을 사용 하여 단일 모델 을 실현 하 는 경 우 는 드 물 었 다. 비록 장점 이 많 지만 단점 도 있다.예 를 들 어 계승 할 수 없고 인 터 페 이 스 를 실현 할 수 없다. 이런 기법 은 일부 연구 개발 자 들 에 게 도 낯 설 고 심리 적 부담 이 많 으 며 더 많이 사용 하 는 것 은 오히려 게으름뱅이 식 이다.또한 단일 모드 를 많이 사 용 했 고 단일 모드 에 존재 하 는 문제점 도 발견 했다.
첫째, 단일 모드 에 추상 층 이 없 기 때문에 단일 클래스 의 확장 에 큰 어려움 이 있다.다른 유형의 구조 함수 도 일반적으로 사유 이기 때문에 계승 할 수 없다.특히 단원 테스트 를 할 때 우 리 는 원시 적 인 종 류 를 계승 하고 mock 의 목적 을 달성 하기 위해 몇 가지 방법 을 덮어 써 야 한다.둘째, 여러 가지 통합 테스트 가 필요 한 것 에 대해 우호 적 이지 않다.클래스 A 는 정상 적 인 상황 에서 하나의 프로 세 스 에 하나의 인 스 턴 스 만 있어 야 하지만 통합 테스트 를 할 때 우 리 는 같은 프로 세 스 에서 두 개의 A 인 스 턴 스 를 구성 하여 테스트 를 편리 하 게 해 야 할 수도 있 습 니 다.셋째, 코드 모듈 간 의 의존 이 뚜렷 하지 않다.예 를 들 어 모듈 B 가 클래스 A 의 인 스 턴 스 를 사용 해 야 할 때 A. getInstance () 로 A 의 유일한 인 스 턴 스 를 얻 을 수 있 습 니 다. 그러면 전체 프로젝트 코드 에 A. getInstance () 와 같은 사용 이 곳곳에 있 기 때문에 어떤 모듈 이 A 에 진정 으로 의존 하 는 지 알 기 어렵 습 니 다.만약 에 B 의 구조 함수 가 B (A) 라면 B 가 A 에 대한 의존 도 를 직관 적 으로 볼 수 있다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.