模板设计模式

什么是模板?简单的说,模板就是固化的抽象了的算法。


举这么一个栗子:

有一个每天的生活流程:起床 -> 工作 -> 吃饭 -> 工作 -> 睡觉。

那么,这样一个流程就可以理解为是一个模板。模板的存在,只是指明了算法的运行流程,但是并没有具体指明该流程的细节。例如在上面的例子中,模板只指明了需要有起床这一个步骤,而并没有给出起床这一方法的细节(例如如何起床,是先穿衣服还是先穿袜子)。

有了模板之后,具体的类便可以在不改变流程的前提下,对每一个流程进行细节上的定义,此时模板便作为了一种公共的操作而存在。


看完上面的描述,可以发现,模板和抽象类很像,或者说,模板就是一个抽象类。

如果将上面所描述的流程以模板的形式来定义后,便可以这样来写:

//定义
abstract class Action{
	public abstract void wakeUp();//起床
	public abstract void work();//工作
	public abstract void eat();//吃
	public abstract void sleep();//睡觉
	
	public void daily(){//一天的生活流程
		this.wakeUp();
		this.work();
		this.eat();
		this.work();
		this.sleep();
	}
}

这一个抽象类就可以看成是一个模板,在这个模板中,将所有的流程定义为了抽象方法,并使用一个非抽象方法将这些流程按照既定的算法整合起来。

既然是抽象类中的抽象方法,那么在普通的子类中就必须要被实现,而不同的子类可以有自己的实现细节,可以和其他的子类具有相同的实现细节,也可以和其他的子类具有不同的实现细节。

这,就是模板设计模式。

那么接下来写两个子类来实现一下这些抽象方法:

public class Class1 extends Action{
	public void wakeUp(){
		System.out.println("从床上坐了起来");
		System.out.println("穿上了衣服");
		System.out.println("穿上了裤子");
		System.out.println("穿上了袜子");
	}
	public void work(){
		System.out.println("开始写代码了");
	}
	public void eat(){
		System.out.println("开始吃午饭了");
	}
	public void sleep(){
		System.out.println("睡前敲了一会儿代码");
		System.out.println("开始睡觉了");
	}
}

public class Class2 extends Action{
	public void wakeUp(){
		System.out.println("从床上坐了起来");
		System.out.println("穿上了衣服");
		System.out.println("穿上了袜子");
		System.out.println("穿上了裤子");
		System.out.println("穿上了外套");
		System.out.println("戴上了围巾");
	}
	public void work(){
		System.out.println("开始写文章了");
	}
	public void eat(){
		System.out.println("开始吃午饭了");
	}
	public void sleep(){
		System.out.println("睡前看了一会儿书");
		System.out.println("开始睡觉了");
	}
}

这样一来,每一个子类都实现了模板中的方法,并且每一个子类实现的方法都具有这一个子类的特色。

在主函数中,若是要实现上面例子中的生活流程,则只需要调用抽象类封装好的方法便可以得到想要的结果,而不必关系具体的实现细节。

这样以来模板便只知道全局而不清楚细节,子类便只清楚细节而不知道全局,在调用时,模板作为子类公共的接口而被子类调用,就像这样:

public class Class3{
	public static void main(String[] args){
		Action demo1 = new Class1();
		Action demo2 = new Class2();
		
		demo1.daily();	//此时class1类会调用抽象类提供的公共接口实现整体流程
		demo2.daily();	//此时class2类会调用抽象类提供的公共接口实现整体流程
	}
}

抽象来看,整体的实现流程是这样的:


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值