模板方法模式是类的行为模式。准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。

从这个定义中我们就可以看出,模板模式是一种适应面很广泛的模式。父类定义一个大的功能骨架,然后子类按照这个骨架去实现剩余的部分。不同的子类有不同的表达,但是不能违反父类制定的规则。跟人生是多么类似,生老病死,谁都无法逃脱,我们能做的就是戴着镣铐,好好跳我们的人生之舞。

类图:

java metric模版 java类模板_子类

实例:
    小张,小王,小李,三人大学毕业后,都面临找工作的情况,小张家境不好,但是学习认真刻苦,家里留给他的不多,只能自食其力,靠自己,他喜欢钻研技术,所以决定打工赚钱,回报父母。小王家里面是经商的,所以父母希望提供自己的人脉资金,给小王经商,加上小王头脑聪慧,很乐意的开始了,小李家里面是从政的,父亲一直希望他毕业后考公务员,利用家里的关系,帮他谋个一官半职,小李从小受父亲影响,对政治民生也是很感兴趣。三个人毕业后踏上了不种不同的人生。现实安排下的不同的人生。

代码实现:

/**
 * @author Administrator
 * 人生模板,每个人都需遵循的标准
 */
public abstract class StandardLife 
{
    public void graduate()
    {
    	System.out.println("今天毕业了,走出校门,走上社会,参加工作");
    	
    };
    
    protected abstract void work();
    
    public final void live()
    {
       System.out.println("===============================");
       graduate();//毕业
       work();//上班
       System.out.println("===============================");
    }
}



//小张
public class MrZhang extends StandardLife{

	@Override
	protected void work() {
		// TODO Auto-generated method stub
		System.out.println("打工:男人当自强,虽然家里面给不了多少帮助,但是我还是靠自己,我可以");
	}

}


//小王
public class MrWang extends StandardLife{

	@Override
	protected void work() {
		// TODO Auto-generated method stub
		System.out.println("经商:父母给了我很好的资源,我的生意一定可以做起来");
	}

}



//小李
public class MrLi extends StandardLife{

	@Override
	protected void work() {
		// TODO Auto-generated method stub
		System.out.println("从政:为人民服务一直是我的理想信念");
	}

}

public class StandLifClient {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//小张的人生
		System.out.println("小张的人生===================");
		StandardLife zhang =new MrZhang();
//		zhang.graduate();
//		zhang.work();
		zhang.live();
		
		//小王的人生
		System.out.println("小王的人生===================");
		StandardLife wang =new MrWang();
//		wang.graduate();
//		wang.work();
		wang.live();
		
//		小李的人生
		System.out.println("小李的人生===================");
		StandardLife li =new MrLi();
//		li.graduate();
//		li.work();
		li.live();
		
		
	}

}

结果:

java metric模版 java类模板_父类_02


总结:

父类控制着子类的实现逻辑,子类实现父类的可变部分,但是却继承了逻辑,有些逻辑是无法修改的,我们知道一个算法所需要的关键步骤,并确定了这些步骤的执行顺序,步骤的具体实现是未知的,或者说与具体的环境有关,它把我们不知道的步骤封装成抽象方法,提供一个按正确顺序调用它们的方法,这些方法称为模板方法,提供给外部调用,构成一个抽象基类,子类通过继承这个抽象基类去实现各个步骤的抽象方法,流程的处理逻辑是由父类来控制的。