标签: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