模板模式,官方解释是这样的:
模板模式是类的行为模式。准备一个抽象类,将部分逻辑以具体方法的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类提供不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。模板模式的关键在于:父类提供框架性的公共逻辑,子类提供个性化的定制逻辑。
也就是说,父类提供公共方法,子类提供自定义方法。
这里,我想模拟一个场景,就是比如我们去买手机,品牌手机都会送礼物,不同的品牌送的礼物不一样。这样,我们就可以让父类实现固定逻辑,子类实现不同品牌送礼物的逻辑。
父类代码:
public abstract class Gift {
// 买手机总流程
protected void doSend(){
sendBefore();
send();
sendAfter();
}
// 赠送前
private void sendBefore() {
System.out.println("忽悠你买手机......");
}
// 赠送礼物
protected abstract void send();
// 赠送后
private void sendAfter() {
System.out.println("完成购买,礼物已赠送!");
}
}
子类代码:
小米子类:
public class Mi extends Gift{
@Override
protected void send() {
System.out.println("送了个小米耳机");
}
}
苹果子类:
public class Apple extends Gift{
@Override
protected void send() {
System.out.println("送了个寂寞");
}
}
测试类:
public class Test {
public static void main(String[] args) {
Gift gift = new Mi();
gift.doSend();
gift = new Apple();
gift.doSend();
}
}
结果:
忽悠你买手机......
送了个小米耳机
完成购买,礼物已赠送!
忽悠你买手机......
送了个寂寞
完成购买,礼物已赠送!