最好使用构造函数或方法工厂模式?

时间:2010-05-02 05:25:10

标签: c# java oop constructor factory-pattern

我有一个名为BitmapZone的Bitmap类的包装类。

假设我们有一个WIDTH x HEIGHT位图图片,这个包装器类应该用于允许我发送到其他方法/类本身而不是原始位图。然后,我可以更好地控制用户是否允许使用图片(并且我不必多次复制位图以发送每个方法/类)。

我的问题是:知道所有BitmapZone都是从Bitmap创建的,你觉得哪些更受欢迎?

构造函数语法:类似

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 个答案:

答案 0 :(得分:2)

在这种情况下,我认为没有理由使用静态方法。构造函数运行良好,是构建新BitmapZone的“明显”方法。

如果要改变构造行为,通常会使用静态方法。例如,一个缓存机制,如果参数相同,则返回先前构造的实例。这不能通过构造函数实现,构造函数将始终返回一个新实例。

答案 1 :(得分:2)

我使用第二种工厂方法 - 它使您的代码更具可读性,更直观易用。如果你还没有读过Joshua Bloch的Effective Java,你最好这样做 - 这是一本好书,虽然它不是关于C#,但它将完美地回答你的问题。

答案 2 :(得分:1)

我更喜欢后一个例子(BitmapZone.FromBitmap)超过中间例子,只是因为它的意图更清晰,简洁度可以忽略不计。老实说,我在第一个和最后一个例子之间没有任何偏好;使用最适合您的架构的模式。查看factory method pattern的优点和缺点 - 在这种情况下,它是否适合您,取决于您的设计细节。

我自己,我会从一个简单明了的构造函数开始,除非我有充分的理由不这样做。

答案 3 :(得分:1)

将方法放在Bitmap而不是BitmapZone中。

BitmapZone bitmapZone = originalBitmap.GetZone(x, y)

你自己说:“每个BitmapZone都是从Bitmap创建的”。这样你可以从五个参数变为两个,因为你不需要传入位图,并且每个位图都可能知道它自己的宽度和高度。
 (你怎么会这样做呢?new BitmapZone(originalBitmap, x, y, originalBitmap.Width, originalBitmap.Height)?丑陋。)

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