디자인 모델 의 단일 사례 모델 에 대한 소개 와 몇 가지 실현 방식
7388 단어 C#디자인 모드단일 모드단일 모드 장단 점단일 모드 구현
단일 모드: 단일 대상 의 클래스 는 하나의 인 스 턴 스 만 존재 할 수 있 습 니 다.그것 의 핵심 구조 에는 단일 사례 라 고 불 리 는 특수 류 만 포함 되 어 있다.단일 모드 를 통 해 시스템 에서 이 모드 를 응용 하 는 클래스 는 하나의 인 스 턴 스 만 있 고 하나의 클래스 는 하나의 대상 인 스 턴 스 만 있 음 을 보증 할 수 있 습 니 다.
단일 모드 는 두 가지 구축 방식 이 있 습 니 다.
게으름뱅이 모드: 전역 의 단일 인 스 턴 스 가 처음 사용 되 었 을 때 구축 되 는 것 을 말 합 니 다.
굶 주 린 사람 방식: 전역 의 단일 인 스 턴 스 를 클래스 로 불 러 올 때 구축 하 는 것 을 말 합 니 다.
단일 모드 는 대상 을 되 돌려 주 는 인용 (영원히 같은 것) 과 이 인 스 턴 스 를 얻 는 방법 (정적 방법 이 어야 하 며 보통 getInstance 이름 을 사용 합 니 다) 을 요구 합 니 다.
단일 모델 의 실현 은 주로 다음 과 같은 두 가지 절 차 를 통 해 이 루어 진다.
단일 모드 사용 필드:
게으름뱅이 식 추천 용 몇 가지 방법:
Eg:
///
/// ( )
///
class Singleton
{
#region Fields
///
///
///
private static Singleton m_uniqueinstance;
///
///
///
private static readonly object Locker = new object();
#endregion
#region Constructors
///
///
///
private Singleton()
{
}
#endregion
#region Public Methods
///
/// ( )
///
///
public static Singleton createInstance()
{
if (m_uniqueinstance == null)
{
lock (Locker)
{
if (m_uniqueinstance == null)
{
m_uniqueinstance = new Singleton();
Console.WriteLine(" ");
}
}
}
else
{
Console.WriteLine(" , ");
}
return m_uniqueinstance;
}
}
단점: 처음 불 러 올 때 반응 이 빠 르 지 않 습 니 다.
///
/// ( )
///
public class SingletonStaticClass
{
#region Constructors
private SingletonStaticClass()
{
}
#endregion
#region Public Methods
public static SingletonStaticClass GetInstance()
{
return SingletonInstance.Instance;
}
#endregion
///
///
///
private static class SingletonInstance
{
public static SingletonStaticClass Instance = new SingletonStaticClass();
}
}
///
/// (Lazy)
///
class Singleton2
{
#region Fields
///
/// lazy
///
private static readonly Lazy lazy = new Lazy(() => new Singleton2());
#endregion
#region Constructors
///
///
///
private Singleton2()
{
}
#endregion
#region Properties
///
///
///
public static Singleton2 Instance
{
get { return lazy.Value; }
}
#endregion
}
///
///
///
public sealed class SingletonStatic
{
#region Fields
///
///
///
private static readonly SingletonStatic m_Instance = null;
#endregion
#region Constructors
///
///
///
static SingletonStatic()
{
m_Instance = new SingletonStatic();
}
///
///
///
private SingletonStatic()
{
}
#endregion
#region Properties
///
///
///
public static SingletonStatic Instance
{
get
{
return m_Instance;
}
}
#endregion
}
굶 주 린 사람:
장점: 1. 라인 안전
2. 클래스 로 딩 과 동시에 정적 대상 을 만 들 었 습 니 다. 호출 은 반응 속도 가 빠 릅 니 다.
단점: 자원 효율 이 높 지 않 습 니 다. GetInstance () 는 영원히 실행 되 지 않 을 수도 있 습 니 다. 그러나 이 종류의 다른 정적 방법 을 실행 하거나 이 종 류 를 불 러 오 면 이 인 스 턴 스 는 초기 화 됩 니 다.
///
/// ( )
///
class Singleton1
{
#region Fields
///
///
///
private static Singleton1 Instance = new Singleton1();
#endregion
#region Constructors
///
///
///
private Singleton1()
{
}
#endregion
#region Public Methods
///
///
///
///
public static Singleton1 GetSingleton1()
{
return Instance;
}
#endregion
}
단일 모드 의 장점:
단일 모드 의 단점:
사용 주의사항:
1. 사용 시 반사 모드 로 단일 예 를 만 들 수 없습니다. 그렇지 않 으 면 새로운 대상 을 예화 합 니 다. 2. 게 으 른 단일 모드 사용 시 스 레 드 안전 문제 주의 3. 굶 주 림 사례 모델 과 게 으 름 사례 모델 의 구조 방법 은 모두 개인 적 인 것 이기 때문에 계승 할 수 없고 일부 사례 모델 은 계승 할 수 있다 (예 를 들 어 등록 식 모델).
적용 필드: 단일 모드 에 서 는 하나의 대상 만 만 만 들 수 있 기 때문에 메모 리 를 절약 하고 대상 의 접근 속 도 를 가속 화하 기 때문에 대상 은 공용 이 어야 합 니 다. 여러 모듈 이 같은 데이터 원본 연결 대상 을 사용 하 는 등 장소 에 적합 합 니 다.예: 1. 잦 은 예화 후 소각 대상 이 필요 합 니 다. 2. 대상 을 만 드 는 데 너무 오래 걸 리 거나 자원 을 너무 많이 소모 하지만 자주 사용 하 는 대상. 3. 상태 가 있 는 도구 류 대상. 4. 데이터베이스 나 파일 에 자주 접근 하 는 대상.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
WebView2를 Visual Studio 2017 Express에서 사용할 수 있을 때까지Evergreen .Net Framework SDK 4.8 VisualStudio2017에서 NuGet을 사용하기 때문에 패키지 관리 방법을 packages.config 대신 PackageReference를 사용해야...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.