}
void pourInCup() {
System.out.println(“Pouring into cup”);
}
Coffee和Tea两个类继承CaffineBeverage超类
package simpleTamplateMethod;
/**
-
咖啡继承咖啡因饮料
-
@author wwj
*/
public class Coffee extends CaffineBeverage {
@Override
void brew() {
System.out.println(“Dripping Coffee through filter”); //冲泡咖啡
}
@Override
void addCondiments() {
System.out.println(“Adding Sugar and Milk”); //增加糖和牛奶
}
}
package simpleTamplateMethod;
/**
-
茶类继承自咖啡因饮料
-
@author wwj
*/
public class Tea extends CaffineBeverage{
@Override
void brew() {
System.out.println(“Steeping the tea”); //泡茶
}
@Override
void addCondiments() {
System.out.println(“Adding Lemon”); //增加柠檬
}
}
测试一下
package simpleTamplateMethod;
public class CaffineBeverageTest {
public static void main(String[] args) {
System.out.println(“-------泡茶咯----------”);
Tea myTea = new Tea();
myTea.prepareRecipe(); //调用模板方法,就这样把所有工作做完了
System.out.println(“-------泡茶咯----------”);
System.out.println(“-------煮咖啡咯----------”);
Coffee myCoffee = new Coffee();
myCoffee.prepareRecipe();
System.out.println(“-------煮咖啡咯----------”);
}
}
测试结果
-------泡茶咯----------
Boiling water
Steeping the tea
Pouring into cup
Adding Lemon
-------泡茶咯----------
-------煮咖啡咯----------
Boiling water
Dripping Coffee through filter
Pouring into cup
Adding Sugar and Milk
-------煮咖啡咯----------
对模板方法进行挂钩
package hook;
/**
-
模块方法使用钩子
-
@author wwj
*/
public abstract class CaffineBeverageWithHook {
void prepareRecipe() {
boilWater();
brew();
pourInCup();
if(customerWantsCondiments()){ //加上这个条件,通过一个具体方法来决定是否执行语句,这就是对模块方法进行挂钩
addCondiments();
}
}
abstract void brew();
abstract void addCondiments();
void boilWater() {
System.out.println(“Boilng water”);
}
void pourInCup() {
System.out.println(“Pouring into cup”);
}
/**
-
这就是钩子
-
@return
*/
boolean customerWantsCondiments() {
return true;
}
}
package hook;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class CoffeeWithHook extends CaffineBeverageWithHook {
@Override
void brew() {
System.out.println(“Dripping Coffee through filter”);
}
@Override
void addCondiments() {
System.out.println(“Adding Sugar and Milk”);
}
/**
- 覆盖这个钩子函数,提供自己的功能
*/
public boolean customerWantsCondiments() {
String answer = getUserInput();
if(answer.toLowerCase().startsWith(“y”)){
return true;
} else {
return false;
}
}
private String getUserInput() {
String answer = null;
System.out.println("Would you like milk and sugar with your coffee (y/n)? ");
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
try {
answer = in.readLine();
} catch (IOException e) {
System.out.println(“IO error trying to read your answer”);
}
if(answer == null) {
return “no”;
}
return answer;
}
}
package hook;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class TeaWithHook extends CaffineBeverageWithHook {
@Override
void brew() {
System.out.println(“Steeping the tea”);
}
@Override
void addCondiments() {
System.out.println(“Adding Lemon”);
}
/**
- 覆盖这个钩子函数,提供自己的功能
*/
public boolean customerWantsCondiments() {
String answer = getUserInput();
if(answer.toLowerCase().startsWith(“y”)){
return true;
} else {
return false;
}
}
最后的最后
对于程序员来说,要学习的知识内容、技术有太多太多,要想不被环境淘汰就只有不断提升自己,从来都是我们去适应环境,而不是环境来适应我们!
当你有了学习线路,学习哪些内容,也知道以后的路怎么走了,理论看多了总要实践的
最后,互联网不存在所谓的寒冬,只是你没有努力罢了!
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
eturn false;
}
}
最后的最后
对于程序员来说,要学习的知识内容、技术有太多太多,要想不被环境淘汰就只有不断提升自己,从来都是我们去适应环境,而不是环境来适应我们!
当你有了学习线路,学习哪些内容,也知道以后的路怎么走了,理论看多了总要实践的
[外链图片转存中…(img-rfOmyhaj-1714693200469)]
最后,互联网不存在所谓的寒冬,只是你没有努力罢了!
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!