一、题目
利用接口和接口回调,实现简单工厂模式,当输入不同字符,代表相应图形时,
利用工厂类获得图形对象,再计算以该图形为底的柱体体积。
1 package angle; 2 3 public interface shape { 4 double getArea(); 5 6 }
package angle; public class rectangle implements shape{ double length; double width; public rectangle(double length,double width){ this.length=length; this.width=width; } public double getArea() { return length*width; } }
package angle; public class triangle implements shape{ double a; double b; double c; public triangle(double a,double b,double c){ this.a=a; this.b=b; this.c=c; } double p=(a+b+c)/2; public double getArea() { return Math.sqrt(p*(p-a)*(p-b)*(p-c)); } }
package angle; public class circular implements shape{ double r; public circular(double r){ this.r=r; } public double getArea() { return 3.14*r*r; } }
package angle; import java.util.Scanner; public class choice { Scanner reader = new Scanner(System.in); shape shape = null; public shape choice(char c){ switch (c) { case 'r': System.out.println("请输入矩形的长和宽"); shape=new rectangle(2, 2); break; case 't': System.out.println("请输入三角形的三条边"); shape = new triangle(4,5,6); break; case 'c': System.out.println("请输入圆的半径"); shape = new circular(5); break; } return shape; } }
package angle; import java.util.Scanner; public class Text { public static void main(String[] args) { System.out.println("请选择需要的图形用图形名称首字母小写来代替"); Scanner reader=new Scanner(System.in); char c = reader.next().charAt(0); choice factory = new choice(); cone cone = new cone(factory.choice(c), reader.nextDouble());//获取底面积,高 System.out.print(cone.getvolum()); } }
package angle; public class cone { shape shape; double high; public cone(shape shape ,double high){ this.shape=shape; this.high=high; } public double getvolum(){ return high*shape.getArea(); } public void changeDi(){ this.shape=shape; } }