一、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