학습 단례 모드의 필기
시스템에 대응하는 실례가 하나만 존재하려면 두 가지 요소가 필요하다.
① 실례를 만드는 데는 구조 방법을 사용해야 하며 구조 방법이 사유임을 보증한다.
이렇게 하면 다른 클래스에서 이 클래스를 만드는 대상을 제한할 수 있습니다.비록 이 종류가 밀봉류가 아니더라도,
이 클래스를 계승하는 하위 클래스에서도 부류 대상과 하위 클래스 대상을 만들 수 없습니다. 왜냐하면 만들 때
부류의 구조 방법을 사용하지만, 사유의 부류 구조 방법은 자류에서 사용할 수 없다.
② 정적 메서드 또는 속성 또는 읽기 전용 필드가 객체 유형을 반환합니다.
다른 클래스에서 새로운 실례를 만들 수 없으니 유일한 실례는 이 클래스의 정의에서만 제공할 수 있습니다.
다른 종류에서 이 실례를 얻을 수 있도록 정적 구성원이 필요하다. 그렇지 않으면 헛수고가 된다.
가장 간단한 형식은 다음과 같다.
class God
{
/// <summary>
///
/// </summary>
private God()
{
}
/// <summary>
///
/// </summary>
public static God OnlyGod
{
//
get { return new God(); }
}
/// <summary>
///
/// </summary>
/// <returns></returns>
public static God ReturnonlyGod()
{
return new God();
}
/// <summary>
///
/// </summary>
public static readonly God ReturnonlyGod = new God();
}
단일 모드를 만들 때 파라미터가 필요하면 정적 방법으로 되돌아오는 것을 선택할 수 있습니다.
주의해야 할 것은 이 세 가지 방법, 속성 또는 필드가 공존할 수 없다는 것이다. 그렇지 않으면 단례 실례가 아니라 이례 모델, 삼례 모델이다.다음과 같습니다.
Console.WriteLine(ReferenceEquals(God.OnlyGod,God.ReturnonlyGod())); //False
물론 이것은 가장 표준적인 것이 아니다.일반적으로 사유의 정적 변수를 정의하여 하나의 예로 인용해야 하기 때문에 흔히 볼 수 있는 것은
public class God
{
/// <summary>
///
/// </summary>
private static God _onlygod = null;
/// <summary>
///
/// </summary>
private God()
{
}
/// <summary>
///
/// </summary>
public static God OnlyGod
{
//_onlygod , _onlygod = new God(),
// _onlygod
get
{
return _onlygod ??(_onlygod = new God());
}
}
}
개인 정적 변수 정의 시 new God () 를 직접 초기화할 수도 있습니다.완만한 로드를 따르기 위해서는 위에 있는 것이 좋다.
단일 모델의 실현을 확보하기 위해서는 몇 가지가 필요하다. ICloneable()를 계승하지 말고, 서열화를 지원하지 말고, 다중 노드 환경에 대응할 수 없다.
말하기: 단일 모드는 남용할 수 없고 안전성 문제를 피할 수 있다. 주로 다중 노드의 상황을 고려하면 다중 노드는God류의 여러 가지 실례를 얻을 수 있다.
평행우주에서 세상에 같은 잎이 두 개 없는 것은 반드시 그렇지는 않다는 뜻이다.
그래서 단례 모델에 대해 일정한 수정을 해야 한다
보조 변수 + 더블 통과Lock+Volatile
public class God
{
/// <summary>
/// +volatile( )
/// </summary>
private static volatile God _onlygod = null;
/// <summary>
/// +
/// </summary>
private static object LockHelper = new object();
/// <summary>
///
/// </summary>
private God()
{
}
/// <summary>
///
/// </summary>
public static God OnlyGod
{
get
{
//+
if (_onlygod == null)
{
lock (LockHelper)
{
if (_onlygod == null)
{
_onlygod = new God();
}
}
}
return _onlygod;
}
}
}
: new 。
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.