JavaSE之面向物件程式設計—抽象類與介面—— 2(模板設計模式——抽象類的實際應用)
阿新 • • 發佈:2018-11-26
模板設計模式——抽象類的實際應用
模板設計最終要的就是我們需要知道在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(); // } // }