Java 接口及接口回調_Chris


題目:

  利用接口和接口回調,實現簡單工廠模式,當輸入不同的字符,代表相應圖形時,利用工廠類獲得圖形對象,再計算以該圖形為底的柱體體積。

代碼:

1、Test.java

 1 /**
 2  * 測試類,包含一個主方法;
 3  * 調用求體積方法輸出;
 4  */
 5 package cn.edu.ccut.object3;
 6 
 7 import java.util.Scanner;
 8 public class Test {
 9 
10     public static void main(String[] args) {
11         char c;
12         while(true){
13             System.out.println("請輸入柱體底的形狀('j'矩形、's'三角形、'z'正方形、't'梯形、'y'圓形、'F'結束程序):");
14             Scanner reader = new Scanner(System.in);
15             c = reader.next().charAt(0); //c接受字符型輸入;
16             if(c == 'F'){     //退出程序標志;
17                 System.out.println("程序結束!");
18                 break;
19             }
20             factory f = new factory();
21             Cone cone = new Cone(f.ctrl_di(c) , 5); //定義矩形對象,根據用戶輸出控制底,高為5;
22             System.out.println("柱體體積是:"+cone.getV());
23         }
24     }
25 
26 }

2、factory.java

 1 /**
 2  * 工廠類,實現簡單工廠模式,包含一個方法;
 3  * ctrl_di實現了根據用戶輸入換底;
 4  */
 5 package cn.edu.ccut.object3;
 6 
 7 public class factory {
 8     Shape shape = null;
 9     public Shape ctrl_di(char c){ //實現了根據用戶輸入換底;
10         switch(c){
11         case 'j':shape = new Rec(3,4);break;
12         case 's':shape = new Triangle(3,4,5);break;
13         case 'z':shape = new Zheng(2);break;
14         case 't':shape = new Trapezoid(4,6,7);break;
15         case 'y':shape = new Circle(3);break;
16         default:System.out.println("error");        
17         }
18         return shape;
19     }
20 }

3、Shape.java

1 /**
2  * 圖形接口;
3  * 定義了一個計算面積的抽象方法getArea;
4  */
5 package cn.edu.ccut.object3;
6 
7 public interface  Shape {
8     public double getArea(); //抽象方法計算面積;
9 }

4、Rec.java

 1 /**
 2  * 矩形類,使用了圖形接口,包含兩個成員變量一個構造方法,並重寫了getArea方法;
 3  * 兩個成員變量分別代表舉行的長和寬;
 4  * 構造方法初始化,getArea計算面積;
 5  */
 6 package cn.edu.ccut.object3;
 7 
 8 public class Rec implements Shape {
 9     double a;
10     double b;
11     Rec(double a , double b){
12         this.a = a;
13         this.b = b;
14     }
15     public double getArea(){
16         return (a*b);
17     }
18 }

5、Zheng.java

 1 /**
 2  * 正方形類,繼承了矩形類,包含兩個方法;
 3  * 構造方法初始化,getArea計算面積
 4  */
 5 package cn.edu.ccut.object3;
 6 
 7 public class Zheng extends Rec {
 8     Zheng(double a){
 9         super(a, a); //利用super調用父類構造方法;
10     }
11 
12     public double getArea(){ //方法重寫;
13         return (a*a);
14     }
15 }

6、Circle.java

 1 /**
 2  * 圓類,使用了圖形接口,包含一個成員變量,兩個方法;
 3  * 成員變量r為半徑;
 4  * 構造方法初始化,重寫了getArea方法;
 5  */
 6 package cn.edu.ccut.object3;
 7 
 8 public class Circle implements Shape{
 9     double r;
10     
11     public Circle(double r){
12         this.r = r;
13     }
14     public double getArea(){
15         return (Math.PI*r*r);
16     }
17 }

7、Triangle.java

 1 /**
 2  * 三角形類,使用了圖形接口,包含了三個成員變量,兩個方法;
 3  * 成員變量a,b,c分別代表三角形的三個邊;
 4  * 構造方法初始化,重寫了getArea方法;
 5  */
 6 package cn.edu.ccut.object3;
 7 
 8 public class Triangle implements Shape{
 9     double a;
10     double b;
11     double c;
12     
13     public Triangle (double a , double b , double c){
14         this.a = a;
15         this.b = b;
16         this.c = c;
17     }
18     public double getArea(){
19         double p = (a + b + c) / 2;
20         return Math.sqrt(p * (p - a) * (p - b) * (p - c));
21     }
22 }

8、Trapezoid.java

 1 /**
 2  * 梯形類,使用了圖形接口,包含三個成員變量,兩個方法;
 3  * 成員變量a,b代表梯形的上底和下底,high代表高;
 4  * 構造方法,重寫getArea;
 5  */
 6 package cn.edu.ccut.object3;
 7 
 8 public class Trapezoid implements Shape{
 9     double a;
10     double b;
11     double high;
12     
13     public Trapezoid(double a , double b , double high){
14         this.a = a;
15         this.b = b;
16         this.high = high;        
17     }
18     public double getArea(){
19         return (((a + b) * high) / 2);
20     }
21 }

9、Cone.java

 1 /**
 2  * 柱體類,兩個成員變量,三個方法;
 3  * 成員變量shape代表底,high代表高;
 4  * 構造方法初始化,getV計算柱體體積,setDi可用於換底;
 5  */
 6 package cn.edu.ccut.object3;
 7 
 8 public class Cone {
 9     Shape shape;
10     double high;
11     public Cone(Shape shape , double high){
12         this.shape = shape;
13         this.high = high;
14     }
15     public double getV(){
16         return (shape.getArea()*high);
17     }
18     public void setDi(Shape shape){ //利用修改器換底
19         this.shape = shape;
20     }
21 }

運行結果:

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM