第9次作业--接口及接口回调
题目:
利用接口和接口回调,实现简单工厂模式,当输入不同的字符,代表相应图形时,利用工厂类获得图形对象,再计算以该图形为底的柱体体积。
一、代码
1.Shape.Java
/**
* 创建Shape接口
* @author Administrator
*
*/
public interface Shape {
double funarea();
}
2.cone.java
/**
* 创建柱类
* 定义Shape接口的对象shape
* 定义柱体的高
* 创建有参构造方法
* 创建求体积方法
* @author Administrator
*
*/
public class cone {
Shape shape;
double high;
public cone(Shape shape,double high){
this.shape=shape;
this.high=high;
}
public double getVolume() {
return shape.funarea()*high;
}
}
3.rec.java
/***
* @author X1393
* 创建rec类引用接口
* 其中包含
* 成员变量l为矩形的长
* 成员变量h为矩形的宽
* 成员变量area为矩形的面积
*/
public class rec implements Shape{
double l;
double h;
public rec(double l,double h) {
this.l=l;
this.h=h;
}
public double funarea() {
return l*h;
}
}
4.trapezium.java
/**
* 创建梯形类引用接口
* 包含上底,下底,高三个成员变量
* 有参构造方法
* 求梯形面积方法
* @author Administrator
*
*/
public class trapezium implements Shape{
double l1;
double l2;
double h;
trapezium(double l1, double l2, double h){
this.h=h;
this.l1=l1;
this.l2=l2;
}
public double funarea() {
// TODO Auto-generated method stub
return (l1+l2)*h/2;
}
}
5.squa.java
/**
* 创建矩形类rec的子类正方形类squ类中包含
* 求正方形面积的方法
* 重写矩形求周长方法求正方形的周长
*/
public class squa extends rec {
public squa(double l) {
super(l,l);
// TODO Auto-generated constructor stub
}
public double funarea(){
return l*l;
}
}
6.tri.java
/**
* 创建三角形类tri引用接口
* 包含三边的成员变量
* 有参构造方法
* 求三角形面积方法
* @author Administrator
*/
public class tri implements Shape{
double a;
double b;
double c;
public tri (double a,double b,double c){
this.a=a;
this.b=b;
this.c=c;
}
public double funarea() {
double p=(a+b+c)/2;
return Math.sqrt(p*(p-a)*(p-b)*(p-c));
}
}
7.circle.java
/**
* 创建圆类引用接口
* 包含有参构造方法
* 求圆体积方法
* @author Administrator
*/
public class circle implements Shape{
double R;
circle (double R){
this.R=R;
}
public double funarea() {
// TODO Auto-generated method stub
return Math.PI*R*R;
}
}
8.foctory.java
/**
* 创建工厂类定义getShape方法
* 调用接口获取圆柱的底
*/
import java.util.Scanner;
public class foctory {
public static Shape getShape(char c){
Scanner reader = new Scanner(System.in);
Shape shape = null;
switch(c){
case 'R':System.out.println("请输入矩形的长和宽");shape = new rec(reader.nextDouble(),reader.nextDouble());break;
case 'S':System.out.println("请输入正方形的边");shape = new squa(reader.nextDouble());break;
case 't':System.out.println("请输入梯形的上下底");shape = new trapezium(reader.nextDouble(),reader.nextDouble(),reader.nextDouble());break;
case 'T':System.out.println("请输入三角形的三边");shape = new tri(reader.nextDouble(),reader.nextDouble(),reader.nextDouble());break;
case 'C':System.out.println("请输入圆形的半径");shape = new circle(reader.nextDouble());break;
}
return shape;
}
}
9.Tset
/**
* 创建主类中包含主方法
* 调用工厂类接受用户选择的主体的底
* 定义柱体对象调用求柱体体积方法
*/
import java.util.Scanner;
public class Tset {
/**
* @param args
*/
public static void main(String[] args) {
Scanner reader = new Scanner(System.in);
System.out.println("请选择柱体的底:R-矩形,S-正方形,t-梯形,T-三角形,C-圆");
char C = reader.next().charAt(0);
System.out.println("请输入柱体的高");
double H = reader.nextDouble();
cone D = new cone(foctory.getShape(C), H);
System.out.println("柱体的体积是"+D.getVolume());
}
}
二、运行结果

浙公网安备 33010602011771号