사실, 좀 더 일반적인 문제의 예가되는 특정 문제를 해결하려고했습니다.객체 소비 패턴
Bitmap AnImage; // Several instances of this object are possible: an image is loaded; then is discarded; then a new image is loaded, and so on.
Public class PixelSelection
{
string GenericAttribute;
int X;
int Y;
public PixelSelection(string myAttribute, int x, int y)
{
GenericAttribute = myAttribute;
X = x;
Y = y;
}
}
두 번째 개체 :
- 이 방법으로 생성됩니다 : 새로운 PixelSelection ("무엇이든", AnImage.Width '을 하나의 객체가 다른에 따라 우리가 어디 개체의 커플을 가정 해 봅시다 , AnImage.height) 따라서 AnImage 객체에 따라 달라집니다.
- 주 응용 프로그램이 구독 할 수있는 이벤트를 노출합니다.
은 각 클래스의 단일 인스턴스가 필요하고 두 개체는 사용자가 필요에 따라 생성됩니다 : 당신이 Bitmap 인스턴스없이 PixelSelection를 사용할 수 있지만, 사용자가 PixelSelection와 상호 작용해야 할 때 인스턴스에 대한 필요성이 발생한다 목적.
제가 처리중인 문제는 비트 맵으로 PixelSelection을 동기화하는 방법입니다. 다음과 같은 시나리오를 고려할 수 있습니다.
- PixelSelection을 기본 폼의 속성으로 선언하고 새 비트 맵을 만들 때마다 인스턴스를 만듭니다. 새로운 비트 맵 생성이 필요할 때마다 개발자는 다른 코드 섹션에서 참조 된 새 PixelSelection 객체를 인스턴스화해야하기 때문에 매번 새로운 이벤트 등록이 필요하고 코드가 오류가 발생하기 쉽습니다.
- 시작시 PixelSelection 객체를 인스턴스화합니다. 모든 Bitmap 인스턴스에 대해 동일한 객체를 사용하여 코드에서 실제로 사용되는 X 및 Y 속성 만 업데이트합니다. 비트 맵을 사용할 수 없으므로 x 및 y 매개 변수가없는 새 생성자가 필요하며 적절한 초기화없이 인스턴스에서 작업을 수행하려고 할 때 PixelSelection에서 불일치를 관리하는 코드가 필요합니다.
- Bitmap 및 PixelSelection 객체가있는 래퍼 객체는 Bitmap이 할당 될 때 PixelSelection 객체를 올바르게 작성하거나 업데이트하는 데에만 사용되는 속성으로 사용하십시오. 이 래퍼가 솔루션 도메인 모델에 맞지 않기 때문에 매우 부 자연스러운 (또는 더러워진) 것처럼 들리지만 매우 구체적인 문제를 해결하기위한 해결 방법 일뿐입니다.
- PixelSelection을 속성으로 사용하는 Bitmap에서 파생 된 클래스를 만들어 수명주기를 명백한 방식으로 관리합니다. 이것은 아마도 무언가를 모델링하지 않고 객체 라이프 사이클 요구 및 사용 패턴을 처리하기위한 많은 수의 객체로 채워지는 초고 품질 클래스로 이어질 수 있습니다.
내가 초안을 작성한 4 가지 임시 시나리오는 추상화에서 매우 다르며 다른 도구 세트를 사용하려고합니다. 더 나쁜 것은, 그들이 객체 라이프 사이클 문제와 객체 지향 모델링에 대한 혼란을 보여줌으로써 객체 모델에 대한 이해가 부족하다는 증거를 줄 수 있다고 생각합니다. 누군가가 문제 해결을위한 최선의 방법을 모색하는 데 도움을 줄 수 있습니까? 모범 사례의 관점에서 솔루션이 적절한 대답 인 이유는 무엇입니까? 감사.