模板模式是基于继承的代码复用的基本技术。
模板模式将一部分逻辑具体化,然后声明抽象方法让它的子类以不同的方式去实现,这样就对相同的逻辑有了不同的实现。
模板方法有两个部分: 抽象模板(抽象类) , 具体模板(不同的实现类)
抽象模板:定义了一个或多个抽象操作(抽象方法,基本方法),让子类实现。并定义和实现了一个模板方法,这个模板方法就是抽象模板的顶级架构。
具体模板:实现了抽象模板定义的一个或多个抽象方法,每个抽象模板可以有任意多个具体模板与之对应,每个具体模板都可以实现这些抽象方法,也就是每个具体模板的实现不同,导致抽象模板的顶级逻辑架构也不同。
实例 :
一个现实的例子,一家餐厅有两种优惠政策,针对 VIP 会员有 一种优惠政策 ,对普通客户又有另一种优惠政策,那么针对两种客户人群,自然需要区分开来对待,但是因为都是属于优惠这一逻辑,所以针对 优惠 这个点,可以有不同的具体实现逻辑。
一下是我临时写的代码,所以有错误,请原谅一下,非常感谢
抽象模板:
public abstract class Discount{
//顶级逻辑,模板方法
public void discount(){
int discount_price = discount_price();
String say_What = say_What();
System.out.println("这位客户优惠了" + discount_price);
System.out.println("遇到客户我说了 " + say_What);
}
/**
* 基本方法,不同的具体模板,有不同的实现
*/
//优惠多少钱,由不同的政策和客户人群决定 。
protected int discount_price();
//遇到普通客户说什么,遇到vip客户说什么 , 手动狗头 - . -
protected String say_What();
}
//VIP 优惠政策
public class VipDiscount{
public int discount_price(){
//打5折 , 亏死也要做生意
return 0.5
}
public String say_What(){
return "您好,老板";
}
}
//普通优惠政策
public class NormalDiscount{
public int discount_price(){
//打8折,还是蛮吉利的
return 0.8
}
public String say_What(){
//现实都喊您先生
return "您好,先生";
}