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