题目:
利用接口和接口回调,实现简单工厂模式,当输入不同的字符,代表相应图形时,利用工厂类获得图形对象,再计算以该图形为底的柱体体积。
代码:
Shape.java
/*创建接口
求面积方法*/
package com; public interface Shape { double getArea(); }
JuXing.java
/*定义成员变量
创建构造方法JuXing()
重写接口中求面积方法。*/
/*定义成员变量,创建构造方法JuXing()和重写接口中求面积方法。*/ package com; public class JuXing implements Shape{ double length; double width; public JuXing(double length,double width){ this.length=length; this.width=width; } @Override public double getArea() { double area=length*width; return area; } }
Zfx.java
/* 继承矩形
创建有参构造方法Zfx()
重写求面积方法*/
package com; public class Zfx extends JuXing { public Zfx(double side){ super(side,side); } @Override public double getArea() { double area=width*width; return area; } }
Triangle.java
/*定义三个表示三边的成员变量
创建有参构造方法
重写实现求面积方法*/
package com; public class Triangle implements Shape { double a,b,c; public Triangle(double a,double b,double c){//创建有参构造方法 this.a=a; this.b=b; this.c=c; } @Override public double getArea() { double C=(a+b+c)/2; double area=Math.sqrt(C*(C-a)*(C-b)*(C-c));//面积公式 return area; } }
TX.java
/*定义三个成员变量表示上底下底和高
创建有参构造方法
重写实现求面积方法*/
package com; public class TX implements Shape { double ShangD,XiaD,high; public TX(double ShangD,double XiaD,double high){ this.ShangD=ShangD; this.XiaD=XiaD; this.high=high; } @Override public double getArea() { double area=(ShangD+XiaD)*high/2; return area; } }
Circle.java
/*定义两个成员变量r,PI
创建有参构造方法
重写实现求面积方法*/
package com; public class Circle implements Shape { double r; double PI=3.14; public Circle(double r){ this.r=r; } @Override public double getArea() { double area=PI*r*r; return area; } }
Factory.java
/*创建Xz()方法
运用switch()选择底面形状*/
package com; public class Factory { static Shape shape=null; public static Shape Xz(char c){ switch(c){ case 'j': System.out.println("长方形为底的体积:"); shape=new JuXing(6,1);break; case 'z': System.out.println("正方形为底的体积:"); shape=new Zfx(6);break; case 's': System.out.println("三角形为底的体积:"); shape=new Triangle(3,4,5);break; case 't': System.out.println("梯形为底的体积:"); shape=new TX(6,1,3);break; case 'y': System.out.println("圆为底的体积:"); shape=new Circle(6);break; } return shape; } }
Test.java
/*进行输入操作
创建f和cone对象
判断程序是否退出
cone对象调用求体积方法,输出其返回值*/
package com; import java.util.Scanner; public class Test { public static void main(String[] args) { System.out.println("请选择底面形状:"); System.out.println("j:矩形; z:正方形 ;s:三角形; t:梯形 ;y:圆形"); while(true){ Scanner reader=new Scanner(System.in);//进行键盘输入 char c=reader.next().charAt(0);//接收字符 if(c=='T'){ System.out.println("退出"); return; } Factory f=new Factory(); Cone cone=new Cone(f.Xz(c),9); System.out.println(cone.getV());//输出体积 } } }