模板设计模式,通俗的讲就是制定出一套规定好的套路。
好比乘车的几个步骤:
1:购票
2:取票
3:检票
4:上车
我们可以看到这个是乘车的一个规定步骤,但是其中的购票方式,取票方式,检票方式可以由你自己去决定。
购票方式:网络购票、线下购票。
取票:自助取票、人工取票。
检票:人工检票、电脑识别。
在Java具体的设计就是:使用抽象类将我们的取票步骤规定,具体的取票方式由不同的子类去具体的实现。
1:规定步骤
abstract class Boarding{
//购票方式交由子类具体实现
protected abstract void checkIn();
//取票方式交由子类具体实现
protected abstract void wicket();
//提供一个公共方法规定上的步骤
public void step(){
System.out.println("取票方式");
checkIn();
wicket();
System.out.println("上车结束");
}
}
2:不同的乘车方式
//成年人的乘车方式
class Adults extends Boarding{
//由子类重写父类的购票方式和取票方式
@Override
protected void checkIn() {
System.out.println("网上购票");
}
@Override
protected void wicket() {
System.out.println("自助取票");
}
}
//未成年人的乘车方式
class Underage extends Boarding{
@Override
protected void checkIn() {
System.out.println("车站购票");
}
@Override
protected void wicket() {
System.out.println("人工取票");
}
}
public class TemplateDesign {
public static void main(String[] args) {
System.out.println("成年人乘车方式:");
Boarding boarding=new Adults(); //向上转型
boarding.step();
System.out.println("未成年人乘车方式:");
boarding=new Underage();//向上转型
boarding.step();
}
}
成年人乘车方式:
取票方式
网上购票
自助取票
上车结束
未成年人乘车方式:
取票方式
车站购票
人工取票
上车结束
模板设计的优点:1:提高代码的复用性。2:提高代码的扩展性。3:符合开闭原则。
缺点:每一个具体的实现步骤都需要子类去实现,增加了类的个数,进而导致了系统复杂程度的增加,如果在父类中增加新的抽象方法,所有子类都需要重新改写。