一 需求分析
利用接口和接口回调,实现简单工厂模式,当输入不同的字符,代表相应图形时,利用工厂类获得图形对象,再计算以该图形为底的柱体体积。
二 代码
//工厂模式创建
package com.ccut.www; public interface factory_interface { double change_bottom(char c); }
//调用工厂
public class factory_implement implements factory_interface{ public double change_bottom_long; public double change_bottom_wide; public double change_bottom_up; public double change_bottom_down; public double change_bottom_high; public double change_bottom_radim; public double bottom_area=0.0; Scanner sc=new Scanner(System.in); @Override public double change_bottom(char c) {
//使用switch语句选择
public double change_bottom(char c) { switch(c){
//三角形 case 'a': System.out.println("请输入换底后三角形 的底:"); change_bottom_down=sc.nextDouble(); System.out.println("请输入换底后三角形 的高:"); change_bottom_high=sc.nextDouble(); bottom_area=change_bottom_down*change_bottom_high*0.5; break;
//矩形 case 'b': System.out.println("请输入换底后矩形的长:"); change_bottom_long=sc.nextDouble(); System.out.println("请输入换底后矩形 的宽:"); change_bottom_wide=sc.nextDouble(); bottom_area=change_bottom_long*change_bottom_wide; break;
//正方形 case 'c': System.out.println("请输入换底后正方形的边长:"); change_bottom_long=sc.nextDouble(); bottom_area=Math.pow(change_bottom_long, 2); System.out.println("换底之后正方形柱体的体积是:"+bottom_area); break;
//梯形 case 'd': System.out.println("请输入换底后梯形的上底:"); change_bottom_up=sc.nextDouble(); System.out.println("请输入换底后梯形的下底:"); change_bottom_down=sc.nextDouble(); System.out.println("请输入换底后梯形 的高:"); change_bottom_high=sc.nextDouble(); bottom_area=(change_bottom_up+change_bottom_down)*change_bottom_high*0.5; break;
//圆形 case 'e': System.out.println("请输入换底后圆形的半径:"); change_bottom_radim=sc.nextDouble(); bottom_area=change_bottom_radim*change_bottom_radim*3.14; break; default: System.out.println("请输入正确字符");break; } return bottom_area; }
package com.ccut.www; import java.util.Scanner; class tri { double longth; double width; double area; double circum; public tri(double longth, double width) { this.longth = longth; this.width = width; } public double getArea() { area = longth * width; return area; } } public class sileng extends factory_implement{ private tri juxing; private double high; private double vol; public sileng(tri juxing, double high) { this.juxing = juxing; this.high = high; } public double volCalc(double bottom_area){ double voli=bottom_area*high; return voli; } public double volCalc(){ double voli=juxing.longth*juxing.width*high; return voli; } public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("请输入长:"); float longth = sc.nextFloat(); System.out.println("请输入宽:"); float width = sc.nextFloat(); tri juxing = new tri(longth, width); System.out.println("请输入高:"); double high = sc.nextFloat(); sileng zt=new sileng(juxing, high); System.out.println("柱体的面积是:"+zt.volCalc()); System.out.println("请输入一个字符 代表换底相应的图形 :a.三角形, b.矩形 ,c.正方形 d.梯形e.圆形: "); char s=sc.next().charAt(0); factory_interface fc=new factory_implement(); if(!(s>='a'&&s<='e')){ System.out.println("输入字符有误 ,请重新输入!!!!(请确保输入是个a-e 这个范围!!!)"); } double fa= fc.change_bottom(s); System.out.println("该新柱体的体积是"+zt.volCalc(fa)); } }
三测试