题目:
利用接口和接口回调,实现简单工厂模式,当输入不同的字符,代表相应图形时,利用工厂类获得图形对象,再计算以该图形为底的柱体体积。
一、代码
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()); } }
二、运行结果