题目:
利用接口和接口回调,实现简单工厂模式,当输入不同的字符,代表相应图形时,利用工厂类获得图形对象,再计算以该图形为底的柱体体积。
package example; interface Shape {//定义接口 接口方法 abstract double getArea(); }
package example; class rectangle implements Shape {//长方形类 double chang; double kuan; rectangle(double chang,double kuan){ this.chang=chang; this.kuan=kuan; } public double getArea(){ return chang*kuan; } } class zheng implements Shape{//正方形类 double bian; double area; zheng (double bian){ this.bian=bian; } public double getArea() { return area=bian*bian; } } class yuan implements Shape{//圆形类 final double p=3.14; double banjing; yuan(double banjing){ this.banjing=banjing; } public double getArea() { return p*banjing*banjing; } } class tixing implements Shape{//梯形类 double shangdi; double xiadi; double gao; tixing(double shangdi,double xiadi,double gao){ this.shangdi=shangdi; this.xiadi=xiadi; this.gao=gao; } public double getArea() { return (shangdi+xiadi)*gao/2; } } class sanjiao implements Shape{//三角形类 double a; double b; double c; sanjiao(double a,double b,double c){ this.a=a; this.b=b; this.c=c; } public double getArea() { double d =(a+b+c)/2; return Math.sqrt(d*(d-a)*(d-b)*(d-c)); } } class zhuti{//柱体类 Shape shape; double gao; zhuti(Shape shape,double gao){ this.shape=shape; this.gao=gao; } void huandi(Shape shape) {//换底方法 this.shape=shape; } double volume(){//求体积方法 return shape.getArea()*gao; } }
package example; import java.util.*; class works {//简单工厂类 Shape shape=null; Scanner reader = new Scanner(System.in); public Shape shape() { char z=reader.next().charAt(0); switch(z) { case'j':System.out.println("矩形体积是:");shape=new rectangle(3,4);break; case'z':System.out.println("正方形体积是:");shape=new zheng(5);break; case'y':System.out.println("圆形体积是:");shape=new yuan(5);break; case's':System.out.println("三角形体积是:");shape=new sanjiao(5,6,7);break; case't':System.out.println("梯形体积是:");shape=new tixing(5,6,7);break; } return shape; } }
package example; public class js {//主类 public static void main(String[] args) {//主方法 double gao=5; works worker=new works(); System.out.println("请输入t/z/c/y/s"); for(;;) {//执行for循环,执行简单工厂里的switch,输入一个字母并输出对应柱体的体积。 zhuti zt=new zhuti(worker.shape(),gao); System.out.println(""+zt.volume()); } } }
运行结果: