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

一、题目

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

二、代码

1.Shape.java

/**
 * 创建图形接口,声明求面积方法
 */
package zy9;

public interface Shape {
    double getArea();
}

2.Juxing.java

/**
 * 创建矩形类,定义成员变量和求面积方法
 */
package zy9;

public class Juxing implements Shape{
    double a;
    double b;
    public Juxing(double a,double b){
        this.a=a;
        this.b=b;
    }
    public double getArea(){
        return a*b;
    }
}

3.Zfx.java

/**
 * 创建正方形类继承矩形类,创建有参、无参构造方法和求面积方法
 */
package zy9;

public class Zfx extends Juxing{
    public Zfx(double a){
        super(a,a);
    }
    public Zfx(){
        super(0,0);
    }
    public double getArea(){
        return a*a;
    }
}

4.Sjx.java

/**
 * 创建三角形类,定义成员变量和求面积方法
 */
package zy9;

public class Sjx implements Shape{
    double a;
    double b;
    double c;
    public Sjx(double a,double b,double c){
        this.a=a;
        this.b=b;
        this.c=c;
    }
    public double getArea(){
        double p=(a+b+c)/2;
        return Math.sqrt(p*(p-a)*(p-b)*(p-c));
    }
}

5.Circle.java

/**
 * 创建圆形类,定义成员变量、构造方法和求面积方法
 */
package zy9;

public class Circle implements Shape{
    double r;
    public Circle(double r){
        this.r=r;
    }
    public double getArea(){
        return Math.PI*r*r;
    }
}

6.TiXing.java

/**
 * 创建梯形类,定义成员变量和求面积方法
 */
package zy9;

public class TiXing implements Shape{
    double a;
    double b;
    double h;
    public TiXing(double a,double b,double h){
        this.a=a;
        this.b=b;
        this.h=h;
    }
    public double getArea(){
        return (a+b)*h/2;
    }
}

7.Cone.java

/**
 * 创建柱体类,定义图形对象和高,创建构造方法和求体积方法
 */
package zy9;

public class Cone {
    Shape shape;
    double h;
    public Cone(Shape shape,double h){
        this.h=h;
        this.shape=shape;
    }
    public double getV(){
        return shape.getArea()*h;//接口回调
    }
    
}

8.Factory.java

/**
 * 创建工厂类,定义图形对象,创建Kg方法,方法中写一个开关方法,返回图形对象
 */
package zy9;

public class Factory {
    static Shape shape=null;
    public static Shape Kg(char c){
        switch(c){
        case 'z':System.out.println("以正方形为底的柱体体积为:"); shape=new Zfx(10);break;
        case 's':System.out.println("以三角形为底的柱体体积为:"); shape=new Sjx(1,2,3);break;
        case 'j':System.out.println("以矩形为底的柱体体积为:"); shape=new Juxing(4,5);break;
        case 'c':System.out.println("以圆形为底的柱体体积为:"); shape=new Circle(10);break;
        case 't':System.out.println("以梯形为底的柱体体积为:"); shape=new TiXing(6,9,3);break;
        }
        return shape;
    }
}

9.Test.java

/**
 * 创建测试类,创建一个while循环,在循环中定义一个柱体对象,并调用求体积方法输出结果
 * 如果输入e则退出循环
 */
package zy9;

import java.util.Scanner;

public class Test {

    public static void main(String[] args) {
        while(true){                    //创建循环
        Scanner reader=new Scanner(System.in);
        System.out.println("请输入图形字母:");
        char c=reader.next().charAt(0);
        if(c=='e'){                    //判断是否退出循环
            System.out.println("退出循环");
            return;
        }
        Cone cone=new Cone(Factory.Kg(c),10);//创建柱体对象
        System.out.println(cone.getV());      //输出结果
        
        }
    }

}

 

三、运行结果

 

posted @ 2019-09-30 11:24  魏一人  阅读(139)  评论(0编辑  收藏  举报