模板模式,一个抽象类公开定义了执行它的方法的方式/模板、它的子类可以按需要重写方法实现,但调用将以抽象类中的定义的方式进行,属于行为型模式。
意图:定义一个操作中的算法的骨架,将一些步骤的实现延迟到子类中。
解决一些方法通用,却在每一个子类中都重写这一方法。
优点:1. 封装不变部分,扩展可变部分。2.提取公共代码,便于维护。3. 行为由父类控制,子类实现。
缺点:每个不同的实现都需要一个子类来实现。导致类的个数增加,使得系统更加庞大。
使用场景:有多个子类公有的方法,且逻辑相同。重要的复杂的方法,可以考虑作为模板方法。
实例:
public abstract class Shopping {
public void buyGoods(){
userLogin();
buy();
pay();
}
public final void userLogin(){
System.out.println("用户登录");
}
public abstract void buy();
public void pay(){
System.out.println("使用银联支付");
}
}
public class ShoesShopping extends Shopping {
@Override
public void buy(){
System.out.println("购买Nike鞋子!!!!");
}
}
public class ClothesShopping extends Shopping {
@Override
public void buy(){
System.out.println("购买海澜之家的衣服!!!!");
}
@Override
public void pay(){
System.out.println("使用支付宝支付");
}
}
public class Client {
public static void main(String[] args){
Shopping shoesShopping=new ShoesShopping();
shoesShopping.buyGoods();
System.out.println("----------------");
Shopping clothesShopping=new ClothesShopping();
clothesShopping.buyGoods();
}
}
参考: