模版模式
定义:一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。
模版模式最常见模式之一,也许你就在使用当中。模版模式运用了面向对象的继承特性,把通用的流程都提炼到父类,把具体行为让子类去实现。比如上网买东西通用的流程都是登录、购物、结账、注销四个步骤,网上商超平台有很多,像mila,waka等,也不外乎这四个步骤,而每个平台四个步骤形式各不一样,所以每个平台都自己实现自己的方法。
代码实例
抽象商店类
public abstract class Shop {
protected abstract void login();
protected abstract void pay();
protected abstract void logout();
public void shopping(){
login();
pay();
logout();
}
}
具体商店
public class Mila extends Shop{
protected void login() {
System.out.println("登录Mila");
}
protected void pay() {
System.out.println("结账Mila");
}
protected void logout() {
System.out.println("注销Mila");
}
}
public class Waka extends Shop{
protected void login() {
System.out.println("登录Waka");
}
protected void pay() {
System.out.println("结账Waka");
}
protected void logout() {
System.out.println("注销Waka");
}
}
子类去实现抽象方法就好了,是不是很眼熟,模版模式就是这么简单。当动态选择执行方法,可以加个判断逻辑,这也称为钩子方法。
private boolean isPay;
public void shopping() {
login();
if (isPay) {
pay();
}
logout();
}
public void setPay(boolean isPay) {
this.isPay = isPay;
}
总的来说,模版模式应用场景很广泛,在没认识模版模式之前,也许写了模版模式都认不出。模版模式很容易掌握,像JavaAPI大多类都存在模版模式的身影。不足之处望指教。