第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());
		
	}

}

二、运行结果

 

 

posted @ 2019-10-04 11:03  徐伟刚  阅读(172)  评论(0编辑  收藏  举报