⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 encapsulationalgorithm.java

📁 几个设计模式的java源码实例
💻 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 + -