首页 > 代码库 > 模板方法模式之抽象类继承
模板方法模式之抽象类继承
Test.java
package com.demo_type.pattern.template; public class Test { public static void main(String[] args) { System.out.println("制备咖啡..."); RefreshBeverage coffee = new Coffee(); coffee.prepareBeverageTemplate(); System.out.println("客官,咖啡好了..."); System.out.println("**************************"); System.out.println("制备茶..."); RefreshBeverage tea = new Tea(); tea.prepareBeverageTemplate(); System.out.println("客官,您要的上等好茶好了..."); } }
2. RefreshBeverage.java (提神饮料)
package com.demo_type.pattern.template; /** * @author YBnew * 抽象基类,为所有子类提供一个算法框架 * * 提神饮料 */ public abstract class RefreshBeverage { /* * 制备饮料的模板方法 * 封装所有子类共同遵循的算法框架 */ public final void prepareBeverageTemplate(){ //step1. 将水煮沸 boilWater(); //step2. 泡制饮料 brew(); //step3. 将饮料倒入杯中 pourInCup(); //setp4. 加入调味料 if(isCustomerWantsCondiments()){ addCondiments(); } } /* * 基本方法,降水煮沸,父子类行为都一样,所以设为private, */ private void boilWater() { System.out.println("将水煮沸"); } /* * 抽象的基本方法,泡制饮料 * --话说这里能将protected 变为public么?当然不要这样了,这样到处都能访问这个类和这个抽象方法了 */ protected abstract void brew(); /* * 基本方法,倒入的动作,父子类行为都一样,所以设为private, */ private void pourInCup() { // TODO Auto-generated method stub System.out.println("将水倒入杯中"); } /* * 抽象的基本方法,加入冲泡元素 */ protected abstract void addCondiments(); /* * Hook * 钩子函数,提供一个空的或默认的实现 * 具体的子类可以自行决定是否挂钩以及如何挂钩 * * 功能: 询问用户是否加调料,继承访问权限 */ protected boolean isCustomerWantsCondiments(){ return true; } }
3.Coffee.java
package com.demo_type.pattern.template; public class Coffee extends RefreshBeverage{ @Override protected void brew() { System.out.println("用沸水冲泡咖啡"); } @Override protected void addCondiments() { System.out.println("加入糖和牛奶"); } }
4.Tea.java
package com.demo_type.pattern.template; public class Tea extends RefreshBeverage{ @Override protected void brew() { System.out.println("89度泡5分钟"); } @Override protected void addCondiments() { System.out.println("加入柠檬"); } //如果不想要加柠檬 @Override protected boolean isCustomerWantsCondiments(){ return false; } }
模板方法模式之抽象类继承
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。