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);

他の?なんで?

ありがとう

4

4 に答える 4

2

この場合、静的メソッドを使用する理由はわかりません。コンストラクターはうまく機能し、新しいBitmapZoneを構築するための「明白な」方法です。

構築動作を変更したい場合は、通常、静的メソッドにフォールバックします。たとえば、パラメータが同じ場合に以前に構築されたインスタンスを返すキャッシュメカニズム。これは、常に新しいインスタンスを返すコンストラクターを介して実装することはできません。

于 2010-05-02T05:32:11.850 に答える
2

2番目のファクトリメソッドを使用します。これにより、コードがより読みやすく、より直感的に使用できるようになります。JoshuaBlochによるEffectiveJavaをまだ読んでいない場合は、これを読んだ方がよいでしょう。これはすばらしい本であり、C#に関するものではありませんが、質問に完全に答えることができます。

于 2010-05-02T08:10:43.897 に答える
1

後者の例(BitmapZone.FromBitmap)は、その意図がより明確で、簡潔さの低下がごくわずかであるという理由だけで、真ん中の例よりも好んで使用します。正直なところ、最初の例と最後の例の間に好みはありません。アーキテクチャに最適なパターンを使用してください。ファクトリメソッドパターンの長所と短所を確認します。この場合に適切かどうかは、設計の詳細によって異なります。

私自身、他の方法で行う正当な理由がない限り、単純で単純なコンストラクターから始めます。

于 2010-05-02T05:31:04.240 に答える
1

Bitmapの代わりにメソッドを入れてくださいBitmapZone

BitmapZone bitmapZone = originalBitmap.GetZone(x, y)

あなたはそれを自分で言いました:「各BitmapZoneはビットマップから作成されます」。この方法では、ビットマップを渡す必要がなく、各ビットマップはおそらく独自の幅と高さを知っているため、5つのパラメーターから2つのパラメーターに変更します。
(それ以外の方法でそれをどのように行うつもりでしたかnew BitmapZone(originalBitmap, x, y, originalBitmap.Width, originalBitmap.Height)??醜いです。)

Bitmapクラスを変更できない場合は、それを拡張メソッドにします(もちろん、Javaでは機能しません)。

于 2010-05-02T05:31:34.917 に答える