사용할 수있는 클래스에 대한 기본값을 제공 할 수 있지만 문제가 변경되면 해당 클래스에 대한 모든 참조가 적용되고 "기본값"이되지 않습니다. 이 값과 같은 기본값을 사용하면 메모리에 저장되며 기본값을 사용하는 모든 참조로 전달할 수 있습니다.정적 불변 기본 인스턴스
간단한 예는
class A
{
static public A Default;
}
는 그런 일이 다시 A의 "기본"인스턴스로 A.Default를 사용할 수있는 문제는 불변 또는 적어도 "동결"과 변화에되지 않는 것입니다 그것은 모든 참조를 바꿀 것입니다. 우연히 기본값이 변경되면 혼란을 야기 할 수있는 행동이라면 좋을 수 있습니다.
정말 필요한 것은 기본값을 고정하고 고정 해제하는 방법입니다.
분명히 한 가지 방법은 모든 설정 도구를 조건에서만 설정하고 컬렉션을 읽기 전용으로 표시하는 것입니다. 이런 간단한 행동을 제공하는 것은 반복적 인 일처럼 보입니다.
간단한 라이브러리, 패턴 또는 리플렉션이 있습니까? Copy-on-write 능력은 Default가 변경하려고 시도 할 때 새로운 변경 가능한 인스턴스가 생성 될 수 있다는 점에서 좋을 것입니다. 뿐만 아니라 성능을 향상시킬 수있는 기회가 있다면 플라이급 인스턴스도 만들 수 있습니다 (변경 규모).
예 처음에 동일한 상태로 모두 1M 크기의 (메모리 크기) 객체를 생성한다고 가정합니다. 기본 패턴을 사용하면 실제 객체가 하나만 생성됩니다. 모든 상태 (위치)에 대해 1 개의 매개 변수를 변경한다고 가정하지만 객체 자체는 매우 큽니다. 플라이 웨이트 패턴을 사용하면 1M의 새 오브젝트 대신 (더 느리지 만 평소와 같이 적은 메모리 만) 추적 할 수 있도록 1M 변경된 매개 변수를 갖게됩니다. 충분한 매개 변수가 변경된 후에는 전체 블로운 오브젝트가 마침내 참조로 지정됩니다.
뭐니 뭐니해도?
어떤 상태에서 기본값을 "고정 해제"하고 기본값을 "고정 해제 할 수 있습니까?" – shahkalpesh
실제로이 복합체가 필요한 것이 확실합니까? –
이것은 디자인 상 결함 인 것 같습니다. "Default"인스턴스가 아직 변경되지 않았을 때 둘 다 변경할 수없는 클래스 A가 있습니다.Perhapes 당신은 두 개의 클래스를 필요로하는 불변하고 가변적 인 클래스 또는 클래스를 사용합니다. A는 실제로 구조체 또는 객체와 같은 값 유형이어야합니다 (예 : String과 같은) – MerickOWA