第9次作业--接口及接口回调
题目
利用接口和接口回调,实现简单工厂模式,当输入不同的字符,代表相应图形时,利用工厂类获得图形对象,再计算以该图形为底的柱体体积。
代码
import java.util.Scanner;
/**
* 工厂类,将计算工厂包装起来
*
*/
public class Chang {
TuXing tuxing=null;
Scanner reader = new Scanner(System.in);
public Chang(double height) {
ZhuTi zhuti=new ZhuTi(this.gettuxing(),height);
System.out.println(zhuti.getVolume());
}
public TuXing gettuxing() {
System.out.println("输入首字母选择柱体的底面图形:");
char S=reader.next().charAt(0);
switch(S) {
case'j':System.out.println("矩形柱体的体积是:");tuxing=new JuXing(4,8);break;
case'z':System.out.println("正方形柱体的体积是:");tuxing=new ZhengFangXing(6);break;
case'y':System.out.println("圆形柱体的体积是:");tuxing=new Yuan(7);break;
case's':System.out.println("三角形柱体的体积是:");tuxing=new ShanJiaoXing(5,5,5);break;
case't':System.out.println("梯形柱体的体积是:");tuxing=new TiXing(6,2,2);break;
}
return tuxing;
}
}
/**
* 矩形类 继承接口,求面积,以及构造方法
*
*/
public class JuXing implements TuXing {
double length;
double width;
JuXing(double length, double width) {
this.length = length;
this.width = width;
}
public double getArea() {
return length * width;
}
}
/**
* 三角形类 继承自图形接口
*
*/
public class ShanJiaoXing implements TuXing {
double a;
double b;
double c;
ShanJiaoXing(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));
}
}
/**
* 测试类
*
*/
public class Test {
public static void main(String[] args) {
double high = 6;
while (true) {
Chang gongchang = new Chang(high);
}
}
}
/**
* 梯形类,继承自Shape接口
*
*
*/
public class TiXing implements TuXing {
double shangdi;
double xiadi;
double high;
TiXing(double shangdi, double xiadi, double high) {
this.shangdi = shangdi;
this.xiadi = xiadi;
this.high = high;
}
public double getArea() {
return (shangdi + xiadi) * high / 2;
}
}
/**
* 接口,一个抽象方法
*
*
*/
public interface TuXing {
abstract double getArea();
}
/**
* 圆类继承图像接口
*
*/
public class Yuan implements TuXing {
final double P = 3.14;
double r;
Yuan(double r) {
this.r = r;
}
public double getArea() {
return P * r * r;
}
}
/**
* 正方形类继承Shape接口
*
*/
public class ZhengFangXing implements TuXing {
double chang;
double area;
ZhengFangXing(double chang) {
this.chang = chang;
}
public double getArea() {
return area = chang * chang;
}
}
/**
* 柱体类,一个换底方法
*
* @author Administrator
*
*/
public class ZhuTi {
TuXing tuxing;
double height;
ZhuTi(TuXing tuxing, double height) {
this.tuxing = tuxing;
this.height = height;
}
void changeBase(TuXing tuxing) {
this.tuxing = tuxing;
}
double getVolume() {
return tuxing.getArea() * height;
}
}
运行截图


浙公网安备 33010602011771号