如何实现图像对象的java模板方法设计模式:BufferedImage,Image,ImageIcon
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了如何实现图像对象的java模板方法设计模式:BufferedImage,Image,ImageIcon,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2816字,纯文字阅读大概需要5分钟。
内容图文
什么是图像对象的模板方法设计模式的示例,或不同类型的图像,如:BufferedImage,Image,ImageIcon.我只需要java类方法及其签名和字段,我不需要真正的功能代码.这将基于以下事实:不同类型的图像具有用于显示标题的相同机制但是用于显示图像的不同机制.
解决方法:
理论:
模板方法模式允许您在超类的方法中定义算法的骨架,即所谓的模板方法.
在此模板方法中,调用一个或多个抽象方法来完成算法的某些步骤.这种抽象方法有时被称为占位符方法.
由于它们是抽象的,因此这些步骤在超类中没有实现.相反,它们以不同的方式由子类实现,因此在特定的子类实例上调用继承的模板方法将使用它提供的占位符运行算法.
执行:
考虑使用泛型来实现更强大的模板模式,以及将占位符方法定义为受保护的,因为它们只能在模板方法中调用.
如果您不想让子类覆盖模板方法,请在抽象超类中将其声明为final.
我假设您的示例中的BufferedImage和ImageIcon都是Image的子类,并且模板方法(算法)必须显示带有其标题的图像:
// Class that defines the template method
// Generic parameter allows to define the specific type of image
// that will be handled by this image renderer
public abstract class ImageRenderer<T extends Image> {
// This is the template method
// It's final to avoid that subclasses override it
public final void display(String title, T image) {
// Display title
this.displayTitle(title);
// Let subclasses display specific type of image
this.displayImage(image);
}
// Display title for every image type
// This method is private since it's only called
// from within the template method
// (make it protected if you want to let subclasses
// override it, i.e. for custom title displaying)
private void displayTitle(String title) {
// Display title, no matter the image type
}
// Placeholder method, no implementation
// Actual implementation is delegated to subclasses
protected abstract void displayImage(T image);
}
BufferedImageRenderer类需要通过覆盖它来为displayImage()方法提供实现.这里是泛型有很大帮助的地方,因为displayImage()方法参数不需要下载:
public class BufferedImageRenderer
extends ImageRenderer<BufferedImage> {
@Override
protected void displayImage(BufferedImage image) {
// Display specific buffered image
}
}
相同的注意事项适用于ImageIconRenderer类:
public class ImageIconRenderer
extends ImageRenderer<ImageIcon> {
@Override
protected void displayImage(ImageIcon image) {
// Display specific image icon
}
}
然后,只要您需要显示特定图像及其标题,只需创建适当的渲染器并调用模板方法,即对于ImageIcon:
ImageIcon icon = getImageIconFromSomePlace();
String iconTitle = "My pretty icon";
ImageIconRenderer renderer = new ImageIconRenderer();
renderer.displayImage(iconTitle, icon);
感谢泛型,如果您尝试使用渲染器无法处理的图像调用displayImage(),您将收到一个comnpilation错误:
BufferedImage bufferedImage = getBufferedImageFromSomePlace();
String bufferedImageTitle = "My amazing buffered image";
ImageIconRenderer renderer = new ImageIconRenderer();
renderer.displayImage(bufferedImageTitle, bufferedImage); // compilation error
内容总结
以上是互联网集市为您收集整理的如何实现图像对象的java模板方法设计模式:BufferedImage,Image,ImageIcon全部内容,希望文章能够帮你解决如何实现图像对象的java模板方法设计模式:BufferedImage,Image,ImageIcon所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。