标签:java ar sp on c ad new ef 算法
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; } }
标签:java ar sp on c ad new ef 算法
原文地址:http://my.oschina.net/hyb007/blog/312217