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

我会使用第二种工厂方法 - 它使您的代码更具可读性和更直观的使用。如果你还没有读过 Joshua Bloch 的 Effective Java,你最好读一读——这是一本很棒的书,虽然它不是关于 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 都是从 Bitmap 创建的”。这样你就从五个参数变成了两个,因为你不需要传入位图,而且每个位图大概都知道它自己的宽度和高度。
(否则你打算怎么做new BitmapZone(originalBitmap, x, y, originalBitmap.Width, originalBitmap.Height)??丑陋。)

如果您无法更改 Bitmap 类,请将其设为扩展方法(当然,这在 Java 中不起作用)。

于 2010-05-02T05:31:34.917 回答