2010-05-02 69 views
3

我有一個名爲BitmapZone的Bitmap類的包裝類。更好地使用構造函數或方法工廠模式?

假設我們有一個WIDTH x HEIGHT位圖圖片,這個包裝類應該服務於允許我發送到其他方法/類本身而不是原始位圖的目的。然後,我可以更好地控制用戶是否被允許對圖片進行處理(並且我不必爲了每個方法/類而多次複製位圖)。

我的問題是:知道所有的BitmapZone都是從位圖創建的,你覺得最喜歡什麼?

構造函數的語法:像

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

工廠方法模式:

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

工廠方法模式:

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

其他?爲什麼?

感謝

回答

1

將該方法置於Bitmap而不是BitmapZone

BitmapZone bitmapZone = originalBitmap.GetZone(x, y) 

你自己說的:「每個BitmapZone從創建位圖」。這樣你從五個參數變爲兩個,因爲你不需要傳入位圖,並且每個位圖可能知道它自己的寬度和高度。
(你是如何要做到這一點,否則?new BitmapZone(originalBitmap, x, y, originalBitmap.Width, originalBitmap.Height)?醜。)

如果你不能改變Bitmap類,使它的擴展方法(當然,這不會在Java中工作)。

+0

位圖是您不能控制的系統類。 – 2010-05-02 05:33:31

+0

你必須是一個Java人:P位​​圖是一個。NET框架密封類,所以我不能這樣做:(雖然我可以添加,作爲擴展方法(這將使其工作正如你所說)。 – 2010-05-02 05:34:29

+0

看我的編輯:)我_just_建議使它成爲一種擴展方法。 – tzaman 2010-05-02 05:36:05

1

我更喜歡後者的例子(BitmapZone.FromBitmap)在中間的一個,只是因爲它在它的意圖更加清晰,在簡潔微不足道的下降。說實話,我沒有第一個和最後一個例子之間的偏好;使用最適合您的架構的模式。查看factory method pattern的優缺點 - 在這種情況下是否適合您,取決於您設計的具體情況。

我自己,我會從一個簡單而直接的構造函數開始,除非我有一個很好的理由不然。

2

在這個例子中,我沒有理由使用靜態方法。構造函數運行良好,是構建新BitmapZone的「明顯」方法。

如果您想改變構造行爲,您通常會使用靜態方法。例如,如果參數相同,則返回先前構造的實例的緩存機制。這不能通過構造函數實現,該構造函數將始終返回一個新實例。

+0

我打算說同樣的事情:緩存。它對不可變對象有意義 – Phil 2010-05-02 05:35:16

2

我會使用第二種工廠方法 - 它使您的代碼更具可讀性,更直觀。如果你還沒有閱讀Joshua Bloch撰寫的Effective Java,你最好這樣做 - 這本書很棒,儘管它不是關於C#的,但它會完美地回答你的問題。

相關問題