-
鉤子掛載查看全部
-
抽象方法查看全部
-
抽象及基類查看全部
-
1. if(isCustomerWantsCondiments()){ //步骤4 加入调味料 addCondiments(); } /* * Hook, 钩子函数,提供一个默认或空的实现 * 具体的子类可以自行决定是否挂钩以及如何挂钩 * 询问用户是否加入调料 */ protected boolean isCustomerWantsCondiments() { return true; } 2.tea.java @Override /* * 子类通过覆盖的形式选择挂载钩子函数 * @see com.imooc.pattern.template.RefreshBeverage#isCustomerWantsCondiments() */ protected boolean isCustomerWantsCondiments(){ return false; }查看全部
-
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("茶好了!"); }查看全部
-
1.coffee.java /* * 具体子类,提供了咖啡制备的具体实现 */ public class Coffee extends RefreshBeverage { @Override protected void brew() { System.out.println("用沸水冲泡咖啡"); } @Override protected void addCondiments() { System.out.println("加入糖和牛奶"); } } 2.tea.java /* * 具体子类,提供了制备茶的具体实现 */ 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; } } 3.test.java:查看全部
-
/* * 抽象基类,为所有子类提供一个算法框架 * * 提神饮料 */ public abstract class RefreshBeverage { /* * 制备饮料的模板方法 * 封装了所有子类共同遵循的算法框架 */ public final void prepareBeverageTemplate(){//final定義的方法不能被重寫 //步骤1 将水煮沸 boilWater(); //步骤2 泡制饮料 brew(); //步骤3 将饮料倒入杯中 pourInCup(); } /* * 基本方法,将水煮沸 */ private void boilWater() { System.out.println("将水煮沸"); } /* * 基本方法,将饮料倒入杯中 */ private void pourInCup() { System.out.println("将饮料倒入杯中"); } /* * 抽象的基本方法,泡制饮料 */ protected abstract void brew(); /* * 抽象的基本方法, 加入调味料 */ protected abstract void addCondiments(); }查看全部
-
大致框架查看全部
-
生活中的模板查看全部
-
模板模式的缺点在于Java是单继承查看全部
-
用抽象基类定义框架 1.创建抽象类 ---public abstract class RefreshBeverage 2.创建模版方法 ---public final void prepareBeverageTemplate() ---boilWater(); ---brew(); ---pourInCup(); ---addCondiments(); 3.实现并私有化基本方法 ---private 4.添加抽象的基本方法 ---protected abstract查看全部
-
什么是模版方法? --算法执行的统一框架,模版方法模式定义了一个操作中的算法骨架,将一些步骤延迟到子类实现,使得子类可以在不改变算法结构的同时就重新定义该算法的某些特定步骤。 ----Step1、Step2、....Step n Step n 为斜体时表示未定义具体实行方法查看全部
-
什么是模版? --生活中的事例: ----银行办理业务 ------Step1进门取号、Step2填写单据、Step3等待叫号、Step4窗口办理 ----奥运会开幕 ------Step1升旗奏歌、Step2致辞讲话、Step3文艺汇演、Step4入场仪式查看全部
-
模板方法中需要抽象出一个算法框架(一些列步骤) 模板方法需要声明为final,防止子类重写定义好的算法框架 需要子类重写的方法声明为abstract 定义钩子方法,为子类的实现提供更大灵活性查看全部
-
不让子类改变结构用final来修饰查看全部
举报
0/150
提交
取消