2010-05-02 5 views
3

BitmapZone이라는 Bitmap 클래스에 대한 래퍼 클래스가 있습니다.생성자 또는 메서드 팩토리 패턴을 사용하는 것이 더 낫습니까?

WIDTH x HEIGHT 비트 맵 그림이 있다고 가정하면이 래퍼 클래스는 원래 비트 맵 대신 다른 메서드/클래스 자체에 보낼 수 있도록하기위한 목적으로 사용해야합니다. 그런 다음 사용자가 그림으로 무엇을 할 수 있는지 여부를 더 잘 제어 할 수 있습니다 (그리고 각 메소드/클래스를 보내려면 비트 맵을 많이 복사 할 필요가 없습니다).

제 질문은 : 모든 BitmapZone이 비트 맵에서 만들어 졌음을 알고 있다면, 무엇이 좋을까요?

생성자 구문 :

BitmapZone bitmapZone = BitmapZone.From(originalBitmap, x , y, width, height); 

공장 방법 패턴 :

BitmapZone bitmapZone = BitmapZone.FromBitmap(originalBitmap, x, y, width, height); 

다른

BitmapZone bitmapZone = new BitmapZone(originalBitmap, x, y, width, height); 

공장 방법 패턴과 같이? 왜? 그것의 의도를 더 명확 때문

감사

답변

1

BitmapZone 대신 Bitmap에 넣습니다.

BitmapZone bitmapZone = originalBitmap.GetZone(x, y) 

당신은 스스로 "각 비트 맵 구역은 비트 맵에서 생성되었습니다"라고 말했습니다. 비트 맵을 전달할 필요가 없기 때문에이 매개 변수를 사용하면 5 개의 매개 변수에서 2 개로 이동할 수 있습니다. 각 비트 맵은 아마도 자체 너비와 높이를가집니다.
은 (어떻게 미운? 그, 그렇지? new BitmapZone(originalBitmap, x, y, originalBitmap.Width, originalBitmap.Height)을 할 거라고.) ​​

당신이 (물론, 그 자바에서 작동하지 않을 것입니다하지만) 그 확장 방법 위해선, 비트 맵 클래스를 변경 할 수 없습니다.

+0

비트 맵은 제어하지 않는 시스템 클래스입니다. –

+0

당신은 자바 사람이어야합니다 : P 비트 맵은.NET 프레임 워크 봉인 된 클래스, 그래서 그것을 할 수 없다 : (확장 메서드 (그냥 당신이 말한대로 작동하게 만들 것이라고) 추가 할 수 있지만. –

+0

내 편집 참조하십시오 :) _just_ 확장 메서드를 만드는 것이 좋습니다. – tzaman

1

나는 간결에서 무시할 드롭, 중간에 하나 이상 후자의 예 (BitmapZone.FromBitmap)을 선호하는 것입니다. 솔직히, 나는 첫 번째 예제와 마지막 예제를 선호하지 않는다. 아키텍처에 가장 적합한 패턴을 사용하십시오. 이 경우 귀하에게 적합한 지 여부는 디자인의 특성에 따라 달라집니다. factory method pattern의 장점과 단점을 검토하십시오.

나 자신, 달리 할 이유가 없다면 간단하고 직접적인 생성자로 시작하겠다.

2

이 경우 정적 메서드를 사용할 이유가 없습니다. 생성자는 잘 작동하며 새로운 BitmapZone을 만드는 "명백한"방법입니다.

일반적으로 구성 동작을 변경하려면 정적 방법으로 대체합니다. 예를 들어 매개 변수가 동일하면 이전에 생성 된 인스턴스를 반환하는 캐싱 메커니즘. 이것은 항상 새로운 인스턴스를 반환하는 생성자를 통해 구현 될 수 없습니다.

+0

나는 똑같은 말을하려고 했어. 캐싱. 불변 객체에 대해서는 의미가 있습니다. – Phil

2

두 번째 팩토리 메서드를 사용하면 코드를보다 읽기 쉽고 사용하기 쉽도록 만듭니다. Joshua Bloch의 Effective Java를 읽지 않았다면이 책을 읽는 것이 좋을 것입니다. 훌륭한 책입니다. C#과 관련이 없지만 질문에 완벽하게 답변 할 것입니다.

관련 문제