디자인 모드 의 단일 예 모드 (Singleon Patttern)

2642 단어
단일 모드 (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 () 방법 은 동기 화 를 사용 하여 다 중 스 레 드 환경 에서 여러 개의 인 스 턴 스 가 나타 나 지 않도록 합 니 다.그러나 주의해 야 할 것 은 하나의 사례 모델 이 모든 상황 에서 하나의 사례 를 실현 할 수 있다 는 것 을 보장 할 수 없다 는 것 이다. 예 를 들 어 여러 개의 가상 컴퓨터 나 여러 개의 유형의 로 더 의 상황 에서 하나 이상 의 사례 가 발생 할 수 있 고 구체 적 인 상황 은 여 기 를 참고 할 수 있다. 만약 에 영문 을 보고 싶 지 않 으 면 중국어 번역 이 있다.
  • enum 키워드 사용
  • 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 에 대한 의존 도 를 직관 적 으로 볼 수 있다.

    좋은 웹페이지 즐겨찾기