1. 程式人生 > >JavaSE之面向物件程式設計—抽象類與介面—— 2(模板設計模式——抽象類的實際應用)

JavaSE之面向物件程式設計—抽象類與介面—— 2(模板設計模式——抽象類的實際應用)

                                                                                        模板設計模式——抽象類的實際應用


模板設計最終要的就是我們需要知道在jav開發中我們是開閉原則的:對於功能擴充套件開發,對於修改關閉。
用例子解釋開閉原則的具體含義:

//練習
//模板設計模式:抽象類的一個實際應用場景。採用抽象類來實現模板設計
//1.星巴克咖啡沖泡法
//將水煮沸
//用沸水沖泡咖啡
//將咖啡倒進杯子
//加糖和牛奶
//2.星巴克茶沖泡法
//將水煮沸
//用沸水浸泡茶葉
//把茶倒進杯子
//加檸檬

// //(1)普通思維:
// //對於上面兩個過程進行分析我們可以發現,它們有許多的共同之處:
// //就是前面的過程基本是一致的,只是在最後的新增東西少許部分不同
// //首先,將這兩個過程抽象為類:(下面是我們的正常思維模式就是將兩個過程抽象為兩個類,在兩個類中實現自己的過程)
// class Coffee{ 
// //將水煮沸
// public void boilwater(){
	// System.out.println("將水煮沸");
// }
// //用沸水沖泡咖啡
// public void coffeeBoilwater(){
	// System.out.println("用沸水沖泡咖啡");
// }
// //將咖啡倒進杯子
// public void putCoffee(){
	// System.out.println("將咖啡倒進杯子");
// }
// //加糖和牛奶
// public void putSuger(){
	// System.out.println("加入糖或者牛奶");
// }

// }


// class Tea{
// //將水煮沸
// public void boilwater(){
	// System.out.println("將水煮沸");
// }
// //用沸水浸泡茶葉
// public void teaBoilwater(){
	// System.out.println("用沸水浸泡茶葉");
// }
// //把茶倒進杯子
// public void putTea(){
	// System.out.println("把茶倒進杯子");
// }
// //加檸檬
// public void putLemmon(){
	// System.out.println("加檸檬");
// }
// }

// public class Lesson9Lian{
	// public static void main(String[] args){
		// //衝一杯咖啡
		// Coffee coffee=new Coffee();
		// coffee.boilwater();
		// coffee.coffeeBoilwater();
		// coffee.putCoffee();
		// coffee.putSuger();
		
	// System.out.println("-----------------------");
		
		// //泡一杯茶
		// Tea tea=new Tea();
		// tea.boilwater();
		// tea.teaBoilwater();
		// tea.putTea();
		// tea.putLemmon();
	// }
// }

// //(2)採用模板設計模式
// //對於衝咖啡和泡茶前面三個步驟是基本相同的,經過分析我們將所有的方法都放在一個抽象類中,
// //並且將這些所有的方法都作為泡茶或者泡咖啡的準備工作,定義一個prepar()方法,裡面呼叫這些不同的步驟。
// //將相同的方法直接定義為普通方法放在抽象類中,將不同的方法定義為抽象方法,讓子類去實現它,通過自己的方式。
// //將上述過程抽象為:
// //將水煮沸
// //用水沖泡
// //將飲料放進杯中
// //加入調料
// abstract class drinkBeverage{
	// final void prepar(){//我們不希望這個製作過程被子類修改,所以用final來修飾
		// boilwater();
		// brew();
		// putintoCup();
		// addSpices();
	// }
		// //下面將通用的方法實現以下,將不是通用的方法定義為抽象方法
		 // public void boilwater(){
			// System.out.println("將水煮沸");
		// }
	     // public void putintoCup(){
			// System.out.println("將飲料放入杯中");
		// }
		// public abstract void brew();
		// public abstract void addSpices();
		
// }
// //下面分別實現咖啡和泡茶類
// class Coffee extends drinkBeverage{
	// public void brew(){
		// System.out.println("用水沖泡咖啡");
	// }
	// public void addSpices(){
		// System.out.println("加糖");
	// }
// }
// class Tea extends drinkBeverage{
	// public void brew(){
		// System.out.println("用水沖泡茶葉");
	// }
	// public void addSpices(){
		// System.out.println("加檸檬");
	// }
// }
// public class Lesson9Lian{
	// public static void main(String[] agrs){
		// System.out.println("製作咖啡");
		// Coffee coffee=new Coffee();
		// coffee.prepar();
		// System.out.println("-------------------");
		// System.out.println("製作茶");
		// Tea tea=new Tea();
		// tea.prepar();
		
	// }
// }




// //(3)對於上面的方法我們可以繼續修改第四部,對於新增調料這個步驟有些人是需要的,但是有些人並不需要
// import java.util.Scanner;
// abstract class drinkBeverage{
	// final void prepar(){//我們不希望這個製作過程被子類修改,所以用final來修飾
		// boilwater();
		// brew();
		// putintoCup();
		
		// if(customerWantsAddSpices()){
			// addSpices();
		// }
	// }
		// //下面將通用的方法實現以下,將不是通用的方法定義為抽象方法
		// public abstract void brew();
		// public abstract void addSpices();

		 // public void boilwater(){
			// System.out.println("將水煮沸");
		// }
	     // public void putintoCup(){
			// System.out.println("將飲料放入杯中");
		// }
		// //下面這個方法也叫做鉤子方法
		// public boolean customerWantsAddSpices(){
			// return true;//預設為true,新增調料
		// }		
// }
// //下面分別實現咖啡和泡茶類
// class Coffee extends drinkBeverage{
	// public void brew(){
		// System.out.println("用水沖泡咖啡");
	// }
	// public void addSpices(){
		// System.out.println("加糖");
	// }
	
	// //子類覆寫鉤子方法,實現自定義功能(通過使用者輸入實現是否新增調料)
	// public boolean customerWantsAddSpices(){
		// String answer=getUserInput();
		// if(answer.equals("y")){
			// return true;
		// }else {
			// return false;
		// }
	// }
	// public String getUserInput(){
		// String answer=null;
// System.out.println("您想要在咖啡中加入牛奶或唐糖嗎?(y/n)");		
		// Scanner scanner=new Scanner(System.in);
		// answer=scanner.nextLine();
		// return answer;
	// }
// }
// class Tea extends drinkBeverage{
	// public void brew(){
		// System.out.println("用水沖泡茶葉");
	// }
	// public void addSpices(){
		// System.out.println("加檸檬");
	// }
// }
// public class Lesson9Lian{
	// public static void main(String[] agrs){
		// System.out.println("製作咖啡");
		// Coffee coffee=new Coffee();
		// coffee.prepar();
		// System.out.println("-------------------");
		// System.out.println("製作茶");
		// Tea tea=new Tea();
		// tea.prepar();
		
	// }
// }