📄 encapsulationalgorithm.java
字号:
import java.io.*;
/*封装算法:
* 在一个方法中定义一个算阿飞的框架,而将一些算法的具体步骤延迟到子类中实现,
* 模板方法使得子类在不改变算法结构的情况下,重新定义算法中的某些步骤
* 模板方法的抽象类可以定义具体方法,抽象方法和钩子。
* 抽象方法供子类具体实现,钩子可以让子类实现算法中可选的部分
* */
abstract class CaffeineBeverage{
final void prepareRecipe(){ //声明为final方法,防止子类改变算法框架
boilWater();
brew();
pourInCup();
if(customerWantsCondiments()){ //钩子部分,控制实现算法框架中可选的部分
addCondiments();
}
}
//抽象方法在子类中具体实现
abstract void brew();
abstract void addCondiments();
abstract String getUserInput();
//公共方法,抽象出来在基类中实现,供子类继承
void boilWater(){
System.out.println("boiling Water");
}
void pourInCup(){
System.out.println("pouring into cup");
}
boolean customerWantsCondiments(){
String answer = getUserInput();
if( answer.toLowerCase().startsWith("y") ){
return true;
}
else{
return false;
}
}
}
class Coffee extends CaffeineBeverage{
void brew(){
System.out.println("Dripping coffee through filter");
}
void addCondiments(){
System.out.println("adding sugar and milk");
}
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.err.println("IO eror trying to read your answer");
}
if(answer==null){
return "no";
}
return answer;
}
}
class Tea extends CaffeineBeverage{
void brew(){
System.out.println("Dripping tea through filter");
}
void addCondiments(){
System.out.println("adding lemon");
}
String getUserInput(){
String answer = null;
System.out.println("Would you like lemon in your tea (y/n)?");
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
try{
answer = in.readLine();
}catch(IOException e){
System.err.println("IO eror trying to read your answer");
}
if(answer==null){
return "no";
}
return answer;
}
}
public class EncapsulationAlgorithm {
public static void main(String[] args) {
Coffee coffee = new Coffee();
Tea tea = new Tea();
System.out.println("\nmaking coffee...");
coffee.prepareRecipe();
System.out.println("\nmaking coffee...");
tea.prepareRecipe();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -