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

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值