단일 모드 - 다섯 가지 생 성 모드 중 하나

3495 단어
1. 머리말
디자인 모델 은 일종 의 규범 으로 수많은 사람들 이 수백 수천 에 달 하 는 예 를 통 해 각종 상황 에서 의 처리 방식 을 정리 하고 이런 간단 한 코드 구조 로 농축 되 었 다.이런 모델 의 디자인 목적 에 따라 이들 을 세 가지 유형 으로 나 눌 수 있다. 즉, 창설 형 (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 가 가장 좋 고 그렇지 않 으 면 메모리 가 새 기 쉽다 는 것 이다.

좋은 웹페이지 즐겨찾기