디자인 모드 - 단일 모드 상세 설명
11510 단어 소프트웨어 공학 방법론디자인 모드c#
개술
단일 모드 (Singleton) 는 하나의 인 스 턴 스 만 있 고 전체 방문 점 을 제공 합 니 다.
일반적으로 우 리 는 하나의 전역 변 수 를 대상 에 접근 하 게 할 수 있 지만, 그것 은 당신 이 여러 대상 을 예화 하 는 것 을 방지 할 수 없습니다.가장 좋 은 방법 은 클래스 자체 가 그것 의 유일한 인 스 턴 스 를 저장 하도록 하 는 것 이다.이 종 류 는 다른 인 스 턴 스 가 생 성 되 지 않 고 인 스 턴 스 에 접근 하 는 방법 을 제공 할 수 있 습 니 다.
필드 사용
자원 접근 충돌 처리
어떻게 실현 합 니까 (C \ #)
본 논문 의 실현 코드 는 모두 C \ # 를 바탕 으로 한다.일반적인 실현 방식 은 두 가지 가 있 는데 그것 이 바로 굶 주 린 한식 과 게으름뱅이 식 이다.굶 주 린 한식, 즉 정적 초기 화 방식 으로 불 러 오 면 실례 화 되 는 대상 이기 때문에 시스템 자원 을 미리 점용 해 야 한다.그러나 게으름뱅이 식 은 다 중 스 레 드 방문 의 안전성 문제 에 직면 할 수 있 으 므 로 이중 잠 금 과 같은 처 리 를 해 야 안전 을 확보 할 수 있다.그래서 어떤 방식 을 사용 하 느 냐 는 실제 수요 에 달 려 있다.
이중 잠 금 (게으름뱅이 식)
///
/// -
///
public class Singleton
{
private static Singleton instance;
private static readonly object syncRoot = new object();//
private Singleton() {
}// , new
public static Singleton Instance()
{
if (instance == null)// ,
{
lock (syncRoot)//
{
if (instance == null)
{
instance = new Singleton();
}
}
}
return instance;
}
}
정적 내부 클래스 (게으름뱅이 식)
///
/// -
///
public class Singleton2
{
private Singleton2() {
}
private static class SingletonInstance
{
public static Singleton2 Instance = new Singleton2();
}
public static Singleton2 GetInstance()
{
return SingletonInstance.Instance;
}
}
정적 초기 화 (굶 주 린 식)
///
///
///
public sealed class Singleton3
{
private static readonly Singleton3 instance = new Singleton3();
private Singleton3() {
}
public static Singleton3 GetInstance()
{
return instance;
}
}
대안
어떻게 단일 모델 중의 유일 성 을 이해 합 니까?
단일 모드 의 정의 에서 "하나의 클래스 는 하나의 대상 만 만 들 수 있 습 니 다" 라 고 언급 했다.그 대상 의 유일한 역할 범 위 는 무엇 입 니까?스 레 드 에서 하나의 대상 만 만 만 들 수 있 는 것 을 말 합 니까? 아니면 프로 세 스 에서 하나의 대상 만 만 만 들 수 있 는 것 을 말 합 니까?정 답 은 후자 다. 즉, 단일 모드 가 만 든 대상 은 프로 세 스 의 유일한 것 이다.프로 세 스 간 에 주소 공간 을 공유 하지 않 습 니 다. 만약 에 우리 가 하나의 프로 세 스 에서 다른 프로 세 스 (예 를 들 어 코드 에 fork () 문 구 를 만 들 면 프로 세 스 가 이 문 구 를 실행 할 때 새로운 프로 세 스 를 만 듭 니 다) 를 만 들 면 운영 체 제 는 새로운 프로 세 스에 새로운 주소 공간 을 할당 하고 오래된 프로 세 스 주소 공간의 모든 내용 을 할당 합 니 다.새 프로 세 스 의 주소 공간 에 다시 복사 합 니 다. 이 내용 은 코드, 데이터 (예 를 들 어 user 임시 변수, user 대상) 를 포함 합 니 다.따라서 하나의 예 류 는 오래된 프로 세 스 에 존재 하고 하나의 대상 만 존재 할 수 있 으 며 새로운 프로 세 스 에 도 존재 하고 하나의 대상 만 존재 할 수 있 습 니 다.그리고 이 두 대상 은 같은 대상 이 아니다. 즉, 단일 클래스 에서 대상 의 유일한 역할 범 위 는 프로 세 스 내 에 있 고 프로 세 스 간 에 유일한 것 이 아니다.
어떻게 라인 의 유일한 단 례 를 실현 합 니까?
우 리 는 하나의 맵 을 통 해 대상 을 저장 합 니 다. 그 중에서 key 는 스 레 드 ID 이 고 value 는 대상 입 니 다.이렇게 하면 우 리 는 서로 다른 스 레 드 가 서로 다른 대상 에 대응 하고 같은 스 레 드 는 한 대상 만 대응 할 수 있다.
어떻게 군집 환경 에서 의 단일 예 를 실현 합 니까?
우선, 우 리 는 먼저 '군집 의 유일한' 사례 가 무엇 인지 설명 하 는 것 이 좋 겠 다.우 리 는 여전히 그것 을 '프로 세 스 유일', '스 레 드 유일' 과 비교 할 것 이다.'프로 세 스 유일' 은 프로 세 스 내 에서 유일 하고 프로 세 스 간 에 유일 하지 않다 는 것 을 말한다.'스 레 드 유일' 은 스 레 드 내 에서 유일 하고 스 레 드 간 에 유일 하지 않다 는 것 을 말한다.군집 은 여러 프로 세 스 로 구 성 된 집합 에 해당 하 며, '군집 유일' 은 프로 세 스 내 에서 유일 하고 프로 세 스 간 에 도 유일 하 다.서로 다른 프로 세 스 간 에 같은 대상 을 공유 하고 같은 종류의 여러 대상 을 만 들 수 없다 는 것 이다.
우 리 는 이 단일 대상 을 직렬 화하 여 외부 공유 저장 소 (예 를 들 어 파일) 에 저장 해 야 한다.프로 세 스 가 이 단일 대상 을 사용 할 때 외부 공유 저장 소 에서 메모리 로 읽 고 대상 으로 역 정렬 한 다음 사용 해 야 합 니 다. 사용 이 완료 되면 외부 공유 저장 소 에 다시 저장 해 야 합 니 다.프로 세 스 간 에 항상 하나의 대상 만 존재 하도록 하기 위해 서 는 하나의 프로 세 스 가 대상 을 가 져 온 후에 대상 을 잠 그 고 다른 프로 세 스 가 다시 가 져 오지 않도록 해 야 합 니 다.프로 세 스 가 이 대상 을 사용 한 후에 대상 을 메모리 에서 명시 적 으로 삭제 하고 대상 에 대한 잠 금 을 풀 어야 합 니 다.
어떻게 여러 가지 모델 을 실현 합 니까?
단일 모델 개념 에 대응 하 는 또 하나의 다 중 모델 이 있다.그러면 어떻게 여러 가지 모델 을 실현 합 니까?'단일 예' 는 하나의 클래스 가 하나의 대상 만 만 들 수 있다 는 것 을 말한다.이에 대응 하여 '다 중 예' 는 하나의 클래스 가 여러 개의 대상 을 만 들 수 있 지만 개 수 는 제한 이 있다 는 것 을 말한다. 예 를 들 어 세 개의 대상 만 만 만 들 수 있다.
여러 사례 의 실현 도 비교적 간단 하 다. 하나의 맵 을 통 해 대상 유형 과 대상 간 의 대응 관 계 를 저장 하여 대상 의 개 수 를 제어 한다.
참고 자료
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
디자인 모델 에 대한 인식 (1)대상 을 만 드 는 데 사용 할 인 터 페 이 스 를 정의 하여 하위 클래스 가 어떤 종 류 를 예화 할 지 결정 합 니 다.Factory Method 는 클래스 의 실례 화 를 하위 클래스 로 지연 시 킵 니 다....
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.