第九次作业———接口及接口回调

一.题目:

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

二.代码及注释:

1.正方形类:

//*定义一个正方形类来继承Shape接口,其正方形边长为length及求其面积方法*//
package ccut.lyq;
public class zhengfangxing implements Shape {
    double length;
    double area;
    zhengfangxing(double length){
        this.length=length;
    }
    public double getArea(){
        return area=length*length;
    }
}
 

2.三角形类:

//*定义一个三角形类继承shape接口*其三角形边长为a,b,c,及三角形构造方法和重写面积方法//
package ccut.lyq;
public class sanjiaoxing implements Shape{
    double a;
    double b;
    double c;
    
    sanjiaoxing(double a,double b,double c){
        this.a=a;
        this.b=b;
        this.c=c;
    }
    public double getArea(){
        double d=(a+b+c)/2;
        return Math.sqrt(d*(d-a)*(d-b)*(d-c));
    }
}

3.矩形类:

//*定义一个矩形类继承shape结口,定义矩形长为chang,宽为kuan,计算矩形面积*//
package ccut.lyq;
public class juxing implements Shape{
    double kuan;
    double chang;
    juxing(double kuan,double chang){
        this.chang=chang;
        this.kuan=kuan;
    }
    public double getArea(){
        return kuan*chang;
    }
}

4.梯形类:

//*定义一个梯形类继承shape接口*//
package ccut.lyq;
public class juxing implements Shape{
    double shangdi;
    double xiadi;
    double gao;
    
    juxing(double shangdi,double xiadi,double gao){
        this.xiadi=xiadi;
        this.shangdi=shangdi;
        this.gao=gao;
    }
    public double getArea(){
        return(shangdi+xiadi)*gao/2;
    }
}

5.圆形类:

//*定义圆形类继承shape接口,圆边长为r,及圆的构造方法和重写面积的方法*//
package ccut.lyq;
public class Circle implements Shape{
    double r;
    final double PI=3.14;
    Circle(double r){
        this.r=r;
    }
    public double getArea(){
        return PI*r*r;
    }
}

6.柱体类:

//*定义柱体类,定义一个换底方法,定义柱体的高,及图形面积*//
package ccut.lyq;
public class Cone {
    Shape shape;
    double high;
    public Cone(Shape shape,double high){
        this.shape=shape;
        this.high=high;
    }
    public double getVolume(){
        return shape.getArea()*high;
    }
    public void setShape(Shape shape){
        this.shape=shape;
    }
}

7.工厂类:

//*创建一个工厂类,图形对象为空,并用switch语句选择柱体的底的形状*//
package ccut.lyq;
import java.util.*;
public class Factory {
    Shape shape=null;
    Scanner input=new Scanner(System.in);
    public Factory(double height){
        Cone cone=new Cone(this.getShape(),height);
        System.out.println(cone.getVolume());
    }
    public Shape getShape(){
        System.out.println("请选择底的图形:矩形:R;正方形:S;圆形:C;三角形:V;梯形:T");
        char A=input.next().charAt(0);
        switch(A){
        case'R':System.out.println("以矩形为底的柱体体积为:");shape=new Rectangle(3,6);break;
        case'S':System.out.println("以正方形为底的柱体体积为:");shape=new Square(5);break;
        case'C':System.out.println("以圆形为底的柱体体积为:");shape=new Circle(8);break;
        case'V':System.out.println("以三角形为底的柱体体积为:");shape=new Triangle(5,3,5);break;
        case'T':System.out.println("以梯形为底的柱体体积为:");shape=new Trapezoid(3,5,7);break;
        }
        return shape;
    }
}

8.图形类:

//*定义一个shape接口用来做柱体的底*//
package ccut.lyq;
public interface Shape {
    abstract double getArea();
}

9.主类:

//*主类*//
package ccut.lyq;
public class Text {
    public static void main(String[] args) {
        double height=6;
        Factory factory=new Factory(height);
    }
}

三.运行结果:

猜你喜欢

转载自www.cnblogs.com/lyqqqq/p/11669059.html