题目
利用接口和接口回调,实现简单工厂模式,当输入不同的字符,代表相应图形时,利用工厂类获得图形对象,再计算以该图形为底的柱体体积。
代码
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; } }
运行截图