一.题目
利用接口和接口回调,实现简单工厂模式,当输入不同的字符,代表相应图形时,利用工厂类获得图形对象,再计算以该图形为底的柱体体积。
二.代码及注释
/**Shape类,创建接口,定义抽象类*/
package ccut.cn;
interface Shape {
abstract double getArea();
}
/**矩形类,创建长宽,构造方法,计算矩形面积*/
package ccut.cn;
public class Rectangle implements Shape {
double height;
double width;
Rectangle(double height,double width){
this.height = height;
this.width = width;
}
public double getArea(){
double area=height*width;
return area;
}
}
/**正方形类,创建正方形边长,构造方法,并求正方形面积*/
package ccut.cn;
public class Square implements Shape {
double side;
Square(double side){
this.side = side;
}
public double getArea(){
return side*side;
}
}
/**圆形类,创建圆的半径的成员变量,构造方法,及求圆的面积*/
package ccut.cn;
public class Circle implements Shape {
double radius;
Circle(double radius){
this.radius=radius;
}
public double getArea(){
return 3.14*radius*radius;
}
}
/**三角形类,创建三角形三条边的成员变量,构造方法及求三角形面积*/
package ccut.cn;
public class Triangle implements Shape{
double a;
double b;
double c;
Triangle(double a,double b,double c){
this.a = a;
this.b = b;
this.c = c;
}
public double getArea(){
double s =(a+b+c)/2;
double S = (float) Math.sqrt(s*(s-a)*(s-b)*(s-c));
return S;
}
}
/**梯形类,创建上底下底及高的成员变量,构造方法及求梯形的面积*/
package ccut.cn;
public class Trapezoid implements Shape{
double s_height;
double x_height;
double tall;
Trapezoid(double s_height,double x_height,double tall){
this.s_height = s_height;
this.x_height = x_height;
this.tall = tall;
}
public double getArea(){
return (s_height+x_height)*tall/2;
}
}
/**柱体类,创建柱体高的成员变量,构造方法及计算柱体体积*/
package ccut.cn;
public class Cone {
double length;
Shape shape;
Cone( Shape shape , double length){
this.shape = shape;
this.length = length;
}
double getVolume(){
double v=shape.getArea()*length;
return v;
}
}
/**工厂类,对用户所需求的形状做判断,并返回相对应的形状的面积*/
package ccut.cn;
import java.util.*;
public class Factory {
static Shape shape = null;
static Scanner se=new Scanner(System.in);
public static Shape a(char i){
switch(i){
case 'c' :System.out.println("请输入圆的半径:");
double c = se.nextDouble();
shape = new Circle(c);
break;
case 't' :System.out.println("请输入正方形的边长:");
double t = se.nextDouble();
shape = new Square(t);
break;
case 'r' :System.out.println("请输入矩形的长宽:");
double l = se.nextDouble();
double k = se.nextDouble();
shape = new Rectangle(l,k);
break;
case 's' :System.out.println("请输入三角形三条边:");
double a = se.nextDouble();
double b = se.nextDouble();
double d = se.nextDouble();
shape = new Triangle(a,b,d);
break;
case 'x' :System.out.println("请输入梯形的上底,下底和高:");
double s = se.nextDouble();
double x = se.nextDouble();
double h = se.nextDouble();
shape = new Trapezoid(s,x,h);
break;
}
return shape;
}
}
/**主类,用户输入所需要求柱体的底的形状,调用工厂类,并求相对应的体积*/
package ccut.cn;
import java.util.*;
public class Zhulei {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("柱体高默认为10,请输入底面积图形:");
System.out.println("圆形(c),正方形(t),矩形(r),三角形(s),梯形(x)");
Scanner se = new Scanner(System.in);
char i = se.next().charAt(0);
Cone cone = new Cone(Factory.a(i),10);
System.out.println(cone.getVolume());
}
}
三.运行结果

来源:https://www.cnblogs.com/19980712mj/p/11617186.html