为了账号安全,请及时绑定邮箱和手机立即绑定
  • Ffff
    查看全部
  • Fffffff
    查看全部
  • Fffffff
    查看全部
  • 模板方法:抽象类的非抽象方法。
    查看全部
  • 模版方法模式的使用场景: 1.算法或操作遵循相似的逻辑. 2.重构时(把相同的代码抽象到父类中) 3.重要、复杂的算法,核心算法设计为模版算法. 模版方法模式的优缺点: 优点: 1.封装性好 2.复用性好 3.屏蔽细节 4.便于维护 缺点:需要使用继承,因为java是单继承,一个类只能继承一个类.
    查看全部
  • 该模版方法规定了4个步骤: 1.把水煮沸(boilWater) 2.泡饮料(brew) 3.把饮料倒进杯子(pourInCup) 4.加调味料(addCondiments) 有个问题是该模块方法会使得每种饮料都要加入调料,但有些人却不需要加入任何调料. 是因为在模块方法中把步骤规定得太死,因此不能做到个性化的扩展,此时可以加入钩子方法来解决此问题. 钩子方法:提供一个默认或空的实现,具体的子类可以自行决定是否挂钩以及如何挂钩,即子类可以选择重写该钩子方法(挂钩). 使用钩子方法可以轻松实现个性化设置. public final void prepareBeverageTemplage(){ //将水煮沸 boilWater(); //炮制饮料 brew(); //倒入杯中 pourInCup(); //如果用户需要加入配料则加入. if( isCustomerWantsCondiments() ){ //加入调味料 addCondiments(); } } //钩子方法,用来询问客户是否需要加入配料,默认是返回true,即加入. protected boolean isCustomerWantsCondiments(){ return true; } public final void prepareBeverageTemplage(){ //将水煮沸 boilWater(); //炮制饮料 brew(); //倒入杯中 pourInCup(); //调用钩子方法 beforeAddCondiments(); //加入调味料 addCondiments(); } } //也可以使用void方法进行空实现来创建钩子方法. protected void beforeAddCondiments(){ }
    查看全部
  • 步骤二(创建抽象基类的实现类) //具体子类,提供了咖啡制备的具体实现. public class Coffee extends RefreshBeverage{ //实现泡制方法 protected void brew(){ System.out.println("用沸水冲泡咖啡"); } //实现加入调味方法 protected void addCondiments(){ System.out.println("加入糖和咖啡"); } } //具体子类,提供了茶制备的具体实现. public class Coffee extends RefreshBeverage{ //实现泡制方法 protected void brew(){ System.out.println("用80度的热水浸泡茶叶5分钟"); } //实现加入调味方法 protected void addCondiments(){ System.out.println("加入柠檬"); } } 创建测试类: RefreshBeverage b1=new Coffee(); //调用模版方法 b1.prepareBeverageTemplage();
    查看全部
  • 代码部分: 步骤一(创建抽象基类): //抽象基类,为所有子类提供一个算法框架(提神饮料). public abstract class RefreshBeverage{ //制备饮料的模版方法,封装了所有子类共同遵循的算法框架,用final修饰,为了禁止子类重写该方法. public final void prepareBeverageTemplage(){ //将水煮沸 boilWater(); //炮制饮料 brew(); //倒入杯中 pourInCup(); //加入调味料 addCondiments(); } //基本方法,将水煮沸.将水煮沸与将饮料倒入杯中相对于子类是共同的行为,所以声明为私有,由抽象基类实现. private void boilWater(){ System.out.println("将水煮沸"); } private void pourInCup(){ System.out.println("将饮料倒入杯中"); } //brew与addCondiments这两个方法的共同特点在模版方法中并不知道具体的实现是什么.所以定义为抽象方法,让子类去实现该方法. //抽象的基本方法,泡制饮料. protected abstract void brew(); //抽象的基本方法,加入调料. protected abstract void addCondiments(); }
    查看全部
  • 例子举例: 饮料机要生产两种饮料.分别是咖啡和茶. 咖啡制作步骤: 1.把水煮沸 2.用沸水冲泡咖啡 3.把咖啡倒进杯子 4.加糖和牛奶 茶的制作步骤: 1.把水煮沸 2.用沸水浸泡茶叶 3.把茶倒进杯子 4.加柠檬 可以看到把水煮沸和把饮料倒进杯子都是共性问题,另外冲泡、浸泡步骤和加的配料又有区别,但是都是泡饮料与加料步骤. 因此可以为饮料机配置模版. 模版方法步骤: 1.把水煮沸(boilWater) 2.泡饮料(brew) 3.把饮料倒进杯子(pourInCup) 4.加调味料(addCondiments) 由于煮沸水与倒饮料都是共性问题,因此可以直接在基类中实现该方法,泡饮料与加料不是共性问题,因此定义为抽象方法,由子类去进行实现.
    查看全部
  • 模版方法模式的实现要素:准备一个抽象类,将部分逻辑以具体方法的形式实现,然后声明一些抽象方法交由子类实现剩余逻辑,用钩子方法给予子类更大的灵活性,最后将方法汇总构成一个不可改变的模版方法. 使用模版方法模式一般有两种类型的类, 分别是抽象基类与具体子类. 抽象基类中包括: 1.基本方法,即不同子类的共性,可以直接在抽象基类中定义. 2.抽象方法,代表一些只知道具体原则,不知道具体实现细节.需要延迟到子类实现的步骤. 3.可选的构子函数,即在抽象基类中提供任意个默认或空的实现方法,以供给子类决定是否挂钩以及如何挂钩. 4.模版方法,用final关键字修饰. 具体子类中包括: 1.实现基类中的抽象方法. 2.可选的覆盖钩子方法.
    查看全部
  • 模版方法模式: 生活中的模版: 去银行办事,首先是进门取号、填写单据、等待叫号、窗口办理. 这个过程是每个人都一样的.银行为客户定下了这个模版.每个客户到达营业厅都将遵循这个模版来进行业务办理. 银行不知道每个客户要办理什么业务,因此不知道客户填写的具体单据内容,因此银行在这里定了个填写单据步骤,让这个步骤交给具体的客户来实现. 银行为客户定了个模版,而将某些特定步骤留给客户具体实现.这就是模块方法模式. 模版方法模式定义了操作算法框架,框架中定义了算法执行的步骤,但是这个框架当中会将一些步骤延迟到子类中实现.这就使模版方法的子类在不改变一个算法结构的同时,从新定义该算法的特定步骤.
    查看全部
  • 模板缺点,只能单继承
    查看全部
  • 模板优点
    查看全部
  • 模板方法模式适用场景
    查看全部
  • 模板方法模式 优点:封装性好,复用性好。 缺点:java的单继承特性决定了模板方法模式的局限性。
    查看全部

举报

0/150
提交
取消
课程须知
本课程的学习,需要小伙伴们具有面向对象基础知识及 Java 语言基础。如果您是新手,建议先移步 《Java入门第一季》和《Java入门第二季》
老师告诉你能学到什么?
1、什么是模板方法模式 2、模板方法模式如何实现 3、如何在模板方法模式中增加灵活性 4、专门行业是如何使用模板方法模式

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!