模板方法模式

以下为慕课网总结,希望对大家有所帮助


模板方法模式:

  (场景)算法或操作逻辑相似,重构时(相同的代码抽取到父类中),重要、复杂的算法,核心算法设计为模板;封装性好,复用性好,屏蔽细节,便于维护,缺点:继承,单继承

 /*

 * 抽象基类,为所有子类提供一个算法框架

 * 抽象类,相对于接口可以实现自己的方法

 * 提神饮料

 */

public abstract class RefreshBeverage {

/*

 * 制备饮料的模板方法

 * 封装了所有子类共同遵循的算法框架

 */

public final void prepareBeverageTemplate(){

//步骤1 将水煮沸

boilWater();

//步骤2 泡制饮料

brew();

//步骤3 将饮料倒入杯中

pourInCup();

if(isCustomerWantsCondiments()){

//步骤4 加入调味料

addCondiments();

}

}

/*

 * Hook, 钩子函数,提供一个默认或空的实现

 * 具体的子类可以自行决定是否挂钩以及如何挂钩

 * 询问用户是否加入调料

 */

 protected boolean isCustomerWantsCondiments() {

return true;

}

/*

 * 基本方法,将水煮沸

 */

private void boilWater() {

System.out.println("将水煮沸");

}

/*

 * 基本方法,将饮料倒入杯中

 */

private void pourInCup() {

System.out.println("将饮料倒入杯中");

}

/*

 * 抽象的基本方法,子类实现  */

protected abstract void brew();

/*

 * 抽象的基本方法, 子类实现

 */

protected abstract void addCondiments();

}

 

 

/*

 * 具体子类,提供了基类抽象方法的具体实现

 */

public class Coffee extends RefreshBeverage {

@Override

protected void brew() {

System.out.println("用沸水冲泡咖啡");

}

@Override

protected void addCondiments() {

System.out.println("加入糖和牛奶");

}

}

 

 

 

public class RefreshBeverageTest {

public static void main(String[] args) {

System.out.println("制备咖啡...");

RefreshBeverage b1 = new Coffee();

b1.prepareBeverageTemplate();

System.out.println("咖啡好了!"); System.out.println("\n*****************************";

System.out.println("制备茶...");

RefreshBeverage b2 = new Tea();

b2.prepareBeverageTemplate();

System.out.println("茶好了!");

}

}

 

/*

 * 具体子类,提供了制备茶的具体实现

 */

public class Tea extends RefreshBeverage { 

@Override

protected void brew() {

System.out.println("用80度的热水浸泡茶叶5分钟");

}

@Override

protected void addCondiments() {

System.out.println("加入柠檬");

}

@Override

/*

 * 子类通过覆盖的形式选择挂载钩子函数

 * @see com.imooc.pattern.template.RefreshBeverage#

     * isCustomerWantsCondiments()

 */

protected boolean isCustomerWantsCondiments(){

return false;

}

}

 

行业案列:种类繁多。数量巨大的日志,抽取共性,获得规律,获得文件,打开文件,读取日志结构,处理单行日志,清理工作(移动,电信运行商开发实现)


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值