您的位置:首页 > 编程语言 > Java开发

模板方法模式(TemplateMethod Pattern)(二):java中模板方法和钩子的使用示例

2013-05-11 09:43 1116 查看

一、java API中的模板方法的使用

1.Arrays.sort()排序

在对数组进行排序时,我们常会使用Arrays.sort()方法,Arrays类的sort()方法就是模板方法。

模板方法模式的重点在于提供一个算法,并让子类实现某些步骤,但是在Arrays.sort()数组排序时并不是如此,通常我们无法设计一个类继承java数组,而sort()方法希望能够适用于所有的数组(每个数组都是不同的类),所以定义了一个静态的sort()方法,在模板方法sort()中需要元素比较大小的算法部分,但是对于不同的类有不同的排序规则,所以让被排序的对象内的每个元素提供比较大小的算法部分(方式就是被排序元素的类必须实现Comparable接口)。

Arrays.sort()对数组排序虽然不是先前所说的模板方法的标准实现,但是它的实现仍然符合模板方法模式的精神,再者,由于不需要继承数组就可以实现这个算法,这样使得排序变得更有弹性、更有用。

java中常用的类Integer、String等已经实现了Comparable接口,所以可以直接使用Arrays.sort()对该类型的数组进行排序,如果需要对自定义类型的数组进行排序,则我们自定义的类必须实现Comparable接口。

2.java.io.InputStream类的read()方法

java.io.InputStream抽象类是表示字节输入流的所有类的超类。其中的read(byte b[],int off,int len)就是一个模板方法,在该方法中调用了该类的抽象方法read(),要求子类提供read()方法的实现。这是模板方法模式的典型使用。

3.Swing窗口程序中的钩子:paint()方法

在默认情况下paint()方法是不做事情的(即空实现)(JFrame的超类Component中对paint()进行了空实现),它是一个“钩子”,通过覆盖paint()方法,我们可以将自己的代码插入到JFrame的算法中,显示出想要的画面。

例:

public class MyFrame extends JFrame
{
public MyFrame(String titile)
{
super(titile);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setSize(200, 200);
this.setVisible(true);
}

@Override
public void paint(Graphics g)
{
super.paint(g);
g.drawString("paint() is a hook", 40, 100);
}

public static void main(String[] args)
{
MyFrame f = new MyFrame("swing");
}
}


效果:



4.Applet中的钩子

Applet类中的init()、start()、stop()、destroy()等方法都是空实现的,子类可以选择性地Override这些方法进行扩展。

5.其他

。。。。。。。

二、java技术或开源框架中的模板方法模式的使用

JUnit中的模板方法模式的使用

其他。。。

转载请注明出处:http://blog.csdn.net/jialinqiang/article/details/8869044
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: