2010-05-02 58 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#的,但它会完美地回答你的问题。

相关问题