我有一个名为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);
其他?为什么呢?
由于
答案 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中不起作用)。