课程笔记
课程/Java/后端开发
模式的秘密---模板方法模式
介绍
章节
问答
笔记
renzhehongyi
2017-12-24
钩子函数:提供一个默认的或者空的实现。 具体的子类可以自行决定是否挂钩以及如何挂钩。 也就是提供一个方法,子类想更改就更改,不更改就走默认的。 采用钩子函数来让子类自行判断要不要挂钩,在父类的实现框架中添加if语句做判断,然后再添加一个钩子函数来返回是否需要挂钩,在子类中也要重写这个方法来决定这个子类是否挂钩 钩子函数的使用,使固定的父类模版显得更加灵活,因为并不是所有子类的过程都遵循着父类的规则。而存在的这些些许的差异,因为钩子函数的引入,使得子类的过程可以和父类的过程存在变通性 用钩子(Hook)函数实现子类对算法框架个性化的扩展 1、思想 框架通过提供一个个的钩子,使框架具备了更大的灵活性。不想执行算法框架中的某些个步骤,我们可以脱钩,如果想执行的话,我们可以挂钩。 2、实现 在抽象类中,提供protected钩子方法。这是个实现的或空的方法。这样子类就可以选择覆写-持钩,也可以选择不覆写-脱勾。 3、使用 提供一个isXXX类型的钩子方法。用该方法控制算法框架中 4、某个步骤是否执行 子类不覆写这个方法,就是脱钩,仍按框架逻辑执行,一旦覆写,就是挂钩,将改变框架算法方向,按子类逻辑执行。
0赞 · 0采集
天才小彩笔i
2017-12-19
钩子方法: 基类中关键字为protected的不抽象,子类可以实现复写。
0赞 · 0采集
KingStar1
2017-09-06
科灵路
截图
0赞 · 0采集
KingStar1
2017-09-06
啦咯啦咯考虑团
截图
0赞 · 0采集
回不去小艾
2017-08-24
钩子函数就是抽象父类的一个默认的或者空的方法实现,子类如果想要挂钩的话直接实现钩子函数即可,这样通过接口创建一个具体对象时,这个对象调用钩子函数时调用的就是具体子类的钩子函数的具体实现。在模板方法中可以用来决定客户端是否需要实现抽象父类的某个抽象方法的实现。
0赞 · 0采集
范更
2017-07-26
钩子函数:一般会在抽象类中提供一个默认或空的实现,具体子类可以自行决定是否挂钩以及如何挂钩,如何挂钩就是自己实现逻辑。
0赞 · 0采集
霜花似雪
2017-04-04
钩子函数:提供一个默认的或者空的实现。 具体的子类可以自行决定是否挂钩以及如何挂钩。 也就是提供一个方法,子类想更改就更改,不更改就走默认的。 采用钩子函数来让子类自行判断要不要挂钩,在父类的实现框架中添加if语句做判断,然后再添加一个钩子函数来返回是否需要挂钩,在子类中也要重写这个方法来决定这个子类是否挂钩 钩子函数的使用,使固定的父类模版显得更加灵活,因为并不是所有子类的过程都遵循着父类的规则。而存在的这些些许的差异,因为钩子函数的引入,使得子类的过程可以和父类的过程存在变通性 用钩子(Hook)函数实现子类对算法框架个性化的扩展 1、思想 框架通过提供一个个的钩子,使框架具备了更大的灵活性。不想执行算法框架中的某些个步骤,我们可以脱钩,如果想执行的话,我们可以挂钩。 2、实现 在抽象类中,提供protected钩子方法。这是个实现的或空的方法。这样子类就可以选择覆写-持钩,也可以选择不覆写-脱勾。 3、使用 提供一个isXXX类型的钩子方法。用该方法控制算法框架中 4、某个步骤是否执行 子类不覆写这个方法,就是脱钩,仍按框架逻辑执行,一旦覆写,就是挂钩,将改变框架算法方向,按子类逻辑执行。
0赞 · 0采集
滕玉龙
2017-01-29
package com.imooc.pattern.template; /* * 具体子类,提供了制备茶的具体实现 */ 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; } } 运行结果: 制备咖啡…… 将水煮沸 用沸水冲泡咖啡 饮料倒入杯中 加入糖和牛奶 咖啡好了! ********************* 制备茶…… 将水煮沸 用80度的热水浸泡茶叶5分钟 饮料倒入杯中 茶好了!
截图
0赞 · 0采集
滕玉龙
2017-01-29
模式的秘密---模板方法模式——代码实现 I 1、RefreshBeverage.java /* * 抽象基类,为所有子类提供一个算法框架 * 提神饮料 */ 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(); } ... 【温馨提示:JavaSE/EE、SSH/SSM、Hybrid APP、JQ/JS/CSS3/H5等编程爱好者关注我,加我慕课好友,互相学习,共同进步!】
截图
0赞 · 0采集
梦编猿
2016-08-02
模式的秘密---模板方法模式——代码实现 II 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 /* * 子类通过覆盖的形式选择挂载钩子函数 */ protected boolean isCustomerWantsCondiments(){ return false; } } 3、Coffee.java /* * 具体子类,提供了咖啡制备的具体实现 */ public class Coffee extends RefreshBeverage { @Override protected void brew() { System.out.println("用沸水冲泡咖啡"); } @Override protected void addCondiments() { System.out.println("加入糖和牛奶"); } } 4、RefreshBeverageTest.java public class RefreshBeverageTest { public static void main(String[] args) { System.out.println("制备咖啡..."); RefreshBeverage b1 = new Coffee(); b1.prepareBeverageTemplate(); System.out.println("咖啡好了!"); System.out.println("制备茶..."); RefreshBeverage b2 = new Tea(); b2.prepareBeverageTemplate(); System.out.println("茶好了!"); } } Ps:注意钩子方法的使用。
截图
1赞 · 1采集
梦编猿
2016-08-02
模式的秘密---模板方法模式——代码实现 I 1、RefreshBeverage.java /* * 抽象基类,为所有子类提供一个算法框架 * 提神饮料 */ 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(); } ... 【温馨提示:JavaSE/EE、SSH/SSM、Hybrid APP、JQ/JS/CSS3/H5等编程爱好者关注我,加我慕课好友,互相学习,共同进步!】
1赞 · 1采集
慕尼黑4302789
2016-07-13
在子类中覆盖重写父类的挂钩函数来实现是否挂钩
截图
0赞 · 0采集
慕尼黑4302789
2016-07-13
采用钩子函数来让子类自行判断要不要挂钩,在父类的实现框架中添加if语句做判断,然后再添加一个钩子函数来返回是否需要挂钩,在子类中也要重写这个方法来决定这个子类是否挂钩
截图
0赞 · 0采集
VincentLc
2016-07-04
子类通过覆盖的形式选择挂载钩子函数
截图
0赞 · 0采集
VincentLc
2016-07-04
钩子方法的实现
截图
0赞 · 0采集
黑白K
2016-06-24
钩子函数的使用,使固定的父类模版显得更加灵活,因为并不是所有子类的过程都遵循着父类的规则。而存在的这些些许的差异,因为钩子函数的引入,使得子类的过程可以和父类的过程存在变通性
截图
0赞 · 0采集
人生24k
2016-06-19
钩子函数:提供一个默认的或者空的实现。 具体的子类可以自行决定是否挂钩以及如何挂钩。 也就是提供一个方法,子类想更改就更改,不更改就走默认的。
截图
0赞 · 0采集
destiny1
2016-03-06
钩子函数的使用,使固定的父类模版显得更加灵活,因为并不是所有子类的过程都遵循着父类的规则。而存在的这些些许的差异,因为钩子函数的引入,使得子类的过程可以和父类的过程存在变通性
0赞 · 0采集
Jde冻结
2016-02-25
钩子函数,用于在子类灵活的实现或忽略特定方法
截图
0赞 · 0采集
D_r
2015-08-18
用钩子(Hook)函数实现子类对算法框架个性化的扩展 1、思想 框架通过提供一个个的钩子,使框架具备了更大的灵活性。不想执行算法框架中的某些个步骤,我们可以脱钩,如果想执行的话,我们可以挂钩。 2、实现 在抽象类中,提供protected钩子方法。这是个实现的或空的方法。这样子类就可以选择覆写-持钩,也可以选择不覆写-脱勾。 3、使用 提供一个isXXX类型的钩子方法。用该方法控制算法框架中 4、某个步骤是否执行 子类不覆写这个方法,就是脱钩,仍按框架逻辑执行,一旦覆写,就是挂钩,将改变框架算法方向,按子类逻辑执行。
0赞 · 0采集
苏小闲
2015-08-12
用钩子函数实现子类对算法框架个性化的扩展 思想 1、框架通过提供一个个的钩子,使框架具备了更大的灵活性。不想执行算法框架中的某些个步骤,我们可以脱钩,如果想执行的话,我们可以挂钩。 实现 2、在抽象类中,提供protected钩子方法。这是个实现的或空的方法。这样子类就可以选择覆写-持钩,也可以选择不覆写-脱勾。 使用 3、提供一个isXXX类型的钩子方法。用该方法控制算法框架中 某个步骤是否执行 4、子类不覆写这个方法,就是脱钩,仍按框架逻辑执行,一旦覆写,就是挂钩,将改变框架算法方向,按子类逻辑执行。
0赞 · 0采集
慕无忌3147264
2015-05-27
用钩子函数实现子类对算法框架个性化的扩展 思想 1、框架通过提供一个个的钩子,使框架具备了更大的灵活性。不想执行算法框架中的某些个步骤,我们可以脱钩,如果想执行的话,我们可以挂钩。 实现 2、在抽象类中,提供protected钩子方法。这是个实现的或空的方法。这样子类就可以选择覆写-持钩,也可以选择不覆写-脱勾。 使用 3、提供一个isXXX类型的钩子方法。用该方法控制算法框架中 某个步骤是否执行 4、子类不覆写这个方法,就是脱钩,仍按框架逻辑执行,一旦覆写,就是挂钩,将改变框架算法方向,按子类逻辑执行。
3赞 · 1采集
gx4air
2015-04-09
钩子方法: 条件判断,返回值为boolean
0赞 · 0采集
TonyChiang同學
2014-11-24
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; }
截图
0赞 · 0采集
老男孩_0015
2014-10-23
用钩子函数实现子类对算法框架个性化的扩展 思想 1、框架通过提供一个个的钩子,使框架具备了更大的灵活性。不想执行算法框架中的某些个步骤,我们可以脱钩,如果想执行的话,我们可以挂钩。 实现 2、在抽象类中,提供protected钩子方法。这是个实现的或空的方法。这样子类就可以选择覆写-持钩,也可以选择不覆写-脱勾。 使用 3、提供一个isXXX类型的钩子方法。用该方法控制算法框架中 某个步骤是否执行 4、子类不覆写这个方法,就是脱钩,仍按框架逻辑执行,一旦覆写,就是挂钩,将改变框架算法方向,按子类逻辑执行。
2赞 · 5采集
ttxx天天向上
2014-10-19
挂载钩子
截图
0赞 · 0采集
ttxx天天向上
2014-10-19
钩子
截图
0赞 · 0采集
ttxx天天向上
2014-10-19
钩子实现
截图
0赞 · 0采集
scbzyj
2014-09-30
钩子使子类更灵活 在父类中使用钩子方法可以让子类更加有选择性的实现各自的行为,决定权取决于子类 子类中也一定要重写父类的钩子方法
0赞 · 0采集
GibertJ
2014-09-24
钩子方法: 灵活选择子类实现方法的个数(实现算法的个数)
0赞 · 0采集
数据加载中...