題目1:Lisa正在編寫一個能夠計算三科——數學、英語、程式設計基礎——平均成績(平均成績=三科總成績/3)和智育成績(智育成績=三科總成績*0.7)的程式。由於兩個成績的獲得都要先計算總成績,因此她考慮使用23種設計模式中的模板方法模式完成。模板方法模式——定義一個操作方法中的演演算法的「骨架」,而將一些步驟延遲到子類中。它通過把不變行為搬移到父類別,去除子類中的重複程式碼來體現程式的優勢。為此,Lisa設計了一個抽象類和三個非抽象類:
l 抽象類——AbstractComputer.java
l 計算平均成績的類——ComputerAverage.java
l 計算智育成績的類——ComputerIntel.java
l 測試類——Test.java
(1)AbstractComputer.java
表示兩種計算的「骨架」,組成內容如下:
l total:成員變數,double型,表示總成績
l public abstract double computer( ):表示計算平均成績或智育成績
l public double templateComputer(double math,double english,double program):計算數學、英語、程式設計基礎三科總成績,為total賦值,並呼叫computer( )方法獲得平均成績或智育成績
(2)ComputerAverage.java
AbstractComputer類的非抽象子類,用於計算平均成績,組成內容如下:
l public double computer( ):重寫的computer( )方法,計算total的平均值
(3)ComputerIntel.java
AbstractComputer類的非抽象子類,用於計算智育成績,組成內容如下:
l public double computer( ):重寫的computer( )方法,計算total摺合的智育成績
(4)Test.java
在Test類中通過鍵盤輸入三科成績,如89,97.5,95,分別建立AbstractComputer類的上轉型物件aver和intel,計算這三科成績的平均成績和智育成績,並將結果輸出。
1 //Lisa正在編寫一個能夠計算三科——數學、英語、程式設計基礎——平均成績(平均成績=三科總成績/3)和 2 //智育成績(智育成績=三科總成績*0.7)的程式。由於兩個成績的獲得都要先計算總成績, 3 //因此她考慮使用23種設計模式中的模板方法模式完成。模板方法模式——定義一個操作方法中的演演算法的「骨架」, 4 //而將一些步驟延遲到子類中。它通過把不變行為搬移到父類別,去除子類中的重複程式碼來體現程式的優勢。 5 //為此,Lisa設計了一個抽象類和三個非抽象類: 6 //抽象類——AbstractComputer.java 7 //計算平均成績的類——ComputerAverage.java 8 //計算智育成績的類——ComputerIntel.java 9 //測試類——Test.java 10 //(1)AbstractComputer.java 11 //表示兩種計算的「骨架」,組成內容如下: 12 //total:成員變數,double型,表示總成績 13 //public abstract double computer( ):表示計算平均成績或智育成績 14 //public double templateComputer(double math,double english,double program): 15 //計算數學、英語、程式設計基礎三科總成績,為total賦值,並呼叫computer( )方法獲得平均成績或智育成績 16 17 18 abstract class AbstractComputer { 19 double total; 20 21 public abstract double computer(); 22 23 public double templateComputer(double math, double english, double program) { 24 total = math + english + program; 25 return computer(); 26 } 27 }
//(2)ComputerAverage.java //AbstractComputer類的非抽象子類,用於計算平均成績,組成內容如下: //public double computer( ):重寫的computer( )方法,計算total的平均值 class ComputerAverage extends AbstractComputer { public double computer() { return total / 3; } }
//(3)ComputerIntel.java //AbstractComputer類的非抽象子類,用於計算智育成績,組成內容如下: //public double computer( ):重寫的computer( )方法,計算total摺合的智育成績 class ComputerIntel extends AbstractComputer { public double computer() { return total * 0.7; } }
//(4)Test.java //在Test類中通過鍵盤輸入三科成績,如89,97.5,95,分別建立AbstractComputer類的上轉型物件average和intel, //計算這三科成績的平均成績和智育成績,並將結果輸出。 import java.util.*; public class test2 { public static void main(String[] args) { System.out.println("請分別輸入三科成績:"); @SuppressWarnings("resource") Scanner input = new Scanner(System.in); double math = input.nextDouble(); double english = input.nextDouble(); double program = input.nextDouble(); AbstractComputer computerAverage = new ComputerAverage(); System.out.println("三科平均成績為:"); System.out.println(computerAverage.templateComputer(math, english, program)); AbstractComputer computerIntel = new ComputerIntel(); System.out.println("三科的智育成績為:"); System.out.println(computerIntel.templateComputer(math, english, program)); } }