第9次作业--接口及接口回调

  1. 题目

    利用接口和接口回调,实现简单工厂模式,当输入不同的字符,代表相应图形时,利用工厂类获得图形对象,再计算以该图形为底的柱体体积。

  2. 源程序

    Main.java

     

     1 /**
     2  * 1.文件功能:接受一个字符判断选择柱体的底,输入柱体的高,输出柱体面积
     3  * 2.成员变量:无
     4  * 3.方法:主方法
     5  */
     6 import java.util.*;
     7 
     8 public class Main {
     9 
    10     public static void main(String[] args) {
    11         Scanner in = new Scanner(System.in);
    12         System.out.println("选择作为底的图形    'a' 矩形  'b' 正方形  'c' 梯形  'd' 圆形:");
    13 
    14         String s = in.next();
    15         char judge = s.charAt(0);
    16 
    17         Factory fac = new Factory();
    18         Shape rec = fac.getdi(judge);
    19 
    20         System.out.println("请输入柱体的高:");
    21         ZhuTi zhu = new ZhuTi(rec, in.nextDouble());
    22 
    23         System.out.println("柱体的体积是:" + zhu.getVolume());
    24     }
    25 
    26 }

     

    Shape.java

     

    1 /**
    2  * 1.文件功能:定义接口Shape类
    3  * 2.成员变量:无
    4  * 3.方法:方法头 getArea()
    5  */
    6 public interface Shape {
    7     double getArea();
    8 }

     

    Factory.java

     

     1 /**
     2  * 1.文件功能:接收一个字符判断创建相应对象,赋值,并返回对象的引用
     3  * 2.成员变量:无
     4  * 3.方法:getdi功能就是文件功能
     5  */
     6 import java.util.*;
     7 
     8 public class Factory {
     9 
    10     public Shape getdi(char judge) {
    11         
    12         Scanner in = new Scanner(System.in);
    13 
    14         switch (judge) {
    15         case 'a':
    16             System.out.println("请输入矩形的长和宽");
    17             Rectangle di_1 = new Rectangle(in.nextDouble(), in.nextDouble());
    18             return di_1;
    19         case 'b':
    20             System.out.println("请输入正方形的边");
    21             Square di_2 = new Square(in.nextDouble());
    22             return di_2;
    23         case 'c':
    24             System.out.println("请输入梯形形的上底、下底和高");
    25             Trapezoid di_3 = new Trapezoid(in.nextDouble(),in.nextDouble(),in.nextDouble());
    26             return di_3;
    27         case 'd':
    28             System.out.println("请输入圆形的半径");
    29             Cricle di_4 = new Cricle(in.nextDouble());
    30             return di_4;
    31         default :
    32             System.out.println("请重新开始并输入正确的字符");
    33             System.exit(0);
    34             return null;
    35         }
    36         
    37         
    38     }
    39 
    40 }

     

    Rectangle.java

     

     1 /**
     2  * 1.文件功能:实现接口Shape求矩形的面积
     3  * 2.成员变量:width宽 length长  area面积
     4  * 3.方法:构造方法Rectangle给成员变量赋值 getArea()返回矩形面积
     5  */
     6 public class Rectangle implements Shape{
     7     double width;
     8     double length;
     9     double area;
    10 
    11     Rectangle(double width, double length) {
    12         this.length = length;
    13         this.width = width;
    14         area = length * width;
    15     }
    16 
    17     public double getArea() {
    18         return area;
    19     }
    20 
    21 }

     

    Square.java

     

     1 /**
     2  * 1.文件功能:继承Rectangle 求正方形面积
     3  * 2.成员变量:无
     4  * 3.方法:构造方法Square给成员变量赋值 getArea()返回正方形面积
     5  */
     6 public class Square extends Rectangle {
     7     Square(double side) {
     8         super(side, side);
     9     }
    10 
    11     public double getArea() {
    12         return length * length;
    13     }
    14 }

     

    Trapezoid.java

     

     1 /**
     2  * 1.文件功能:实现接口Shape求梯形的面积
     3  * 2.成员变量:height高  top上底  bottom下底
     4  * 3.方法:构造方法Trapezoid给成员变量赋值 getArea()返回梯形面积
     5  */
     6 public class Trapezoid implements Shape {
     7     double height;
     8     double top;
     9     double bottom;
    10 
    11     Trapezoid(double top, double bottom, double height) {
    12         this.bottom = bottom;
    13         this.height = height;
    14         this.top = top;
    15     }
    16 
    17     public double getArea() {
    18         return (top + bottom) * height / 2;
    19     }
    20 
    21 }

     

    Cricle.java

     

     1 /**
     2  * 1.文件功能:实现接口Shape求圆的面积
     3  * 2.成员变量:r 圆的半径
     4  * 3.方法:构造方法Cricle给r赋值,getArea求圆的面积
     5  */
     6 public class Cricle implements Shape {
     7     double r;
     8 
     9     Cricle(double r) {
    10         this.r = r;
    11     }
    12 
    13     public double getArea() {
    14         return Math.PI * r * r;
    15     }
    16 
    17 }

     

    ZhuTi.java

     

     1 /**
     2  * 1.文件功能:接受底边对象求柱体体积
     3  * 2.成员变量:height高   rec Shape接口变量
     4  * 3.方法:构造方法ZhuTi给成员变量赋值 getVolume返回柱体体积 changeDi改变rec的引用的对象
     5  */
     6 public class ZhuTi {
     7     double height;
     8     Shape rec;
     9 
    10     ZhuTi(Shape rec, double height) {
    11         this.rec = rec;
    12         this.height = height;
    13     }
    14 
    15     double getVolume() {
    16         return rec.getArea() * height;
    17     }
    18 
    19     void changeDi(Rectangle rec) {
    20         this.rec = rec;
    21 
    22     }
    23 
    24 }

     

  3. 运行结果

 

 

 

 

 

posted @ 2019-10-02 18:33  张博涵  阅读(132)  评论(0)    收藏  举报