【发布时间】:2022-01-22 15:00:55
【问题描述】:
我有一个实用程序类:
public class ImageCompressionUtil {
public static void compressor(InputStream image, OutputStream outputStream, double quality,
String outputFormat) throws IOException {
Thumbnails.of(image).scale(1).outputQuality(quality).outputFormat(outputFormat).
toOutputStream(outputStream);
}
public static void compressor(byte[] image, OutputStream outputStream, double quality,
String outputFormat) throws IOException {
ByteArrayInputStream inputStream = new ByteArrayInputStream(image);
Thumbnails.of(inputStream).scale(1).outputQuality(quality).
outputFormat(outputFormat).toOutputStream(outputStream);
}
public static byte[] compressor(InputStream image, double quality, String outputFormat)
throws IOException {
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
Thumbnails.of(image).scale(1).outputQuality(quality).
outputFormat(outputFormat).toOutputStream(outputStream);
return outputStream.toByteArray();
}
public static byte[] compressor(byte[] image, double quality, String outputFormat) throws IOException {
ByteArrayInputStream inputStream = new ByteArrayInputStream(image);
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
Thumbnails.of(inputStream).scale(1).outputQuality(quality).
outputFormat(outputFormat).toOutputStream(outputStream);
return outputStream.toByteArray();
}
}
在这些方法中,我们可以看到一些重复的参数,例如outputStream,quality,outputFormat。
如何重写这个类,以便我可以像这样的模式使用这个类:
// no outputstream/quality/outputFormat specified, default values are used;
ImageCompressionUtil.compressor(image);
// specifiy outputstream or quality or outputFormat
ImageCompressionUtil.compressor(image, outputstream);
ImageCompressionUtil.compressor(image).quality(quality);
ImageCompressionUtil.compressor(image).outputFormat(outputFormat);
// both quality and outputFormat are specified
ImageCompressionUtil.compressor(image).quality(quality).outputFormat(outputFormat);
...
【问题讨论】:
-
在我看来像个建设者。
-
是的,看起来需要 Builder 模式,因为 Java 既不支持命名参数也不支持默认参数(我没有深入研究您的方法,但通常将重载从一个分配到另一个可能比将相同的代码复制到多个地方要好)。欢迎来到 Java 世界...
-
你可以使用builder模式
标签: java design-patterns