一、题目
利用接口和接口回调,实现简单工厂模式,当输入不同的字符,代表相应图形时,利用工厂类获得图形对象,再计算以该图形为底的柱体体积。
二、代码
1.Shape.java
/** * 创建图形接口,声明求面积方法 */ package zy9; public interface Shape { double getArea(); }
2.Juxing.java
/** * 创建矩形类,定义成员变量和求面积方法 */ package zy9; public class Juxing implements Shape{ double a; double b; public Juxing(double a,double b){ this.a=a; this.b=b; } public double getArea(){ return a*b; } }
3.Zfx.java
/** * 创建正方形类继承矩形类,创建有参、无参构造方法和求面积方法 */ package zy9; public class Zfx extends Juxing{ public Zfx(double a){ super(a,a); } public Zfx(){ super(0,0); } public double getArea(){ return a*a; } }
4.Sjx.java
/** * 创建三角形类,定义成员变量和求面积方法 */ package zy9; public class Sjx implements Shape{ double a; double b; double c; public Sjx(double a,double b,double c){ this.a=a; this.b=b; this.c=c; } public double getArea(){ double p=(a+b+c)/2; return Math.sqrt(p*(p-a)*(p-b)*(p-c)); } }
5.Circle.java
/** * 创建圆形类,定义成员变量、构造方法和求面积方法 */ package zy9; public class Circle implements Shape{ double r; public Circle(double r){ this.r=r; } public double getArea(){ return Math.PI*r*r; } }
6.TiXing.java
/** * 创建梯形类,定义成员变量和求面积方法 */ package zy9; public class TiXing implements Shape{ double a; double b; double h; public TiXing(double a,double b,double h){ this.a=a; this.b=b; this.h=h; } public double getArea(){ return (a+b)*h/2; } }
7.Cone.java
/** * 创建柱体类,定义图形对象和高,创建构造方法和求体积方法 */ package zy9; public class Cone { Shape shape; double h; public Cone(Shape shape,double h){ this.h=h; this.shape=shape; } public double getV(){ return shape.getArea()*h;//接口回调 } }
8.Factory.java
/** * 创建工厂类,定义图形对象,创建Kg方法,方法中写一个开关方法,返回图形对象 */ package zy9; public class Factory { static Shape shape=null; public static Shape Kg(char c){ switch(c){ case 'z':System.out.println("以正方形为底的柱体体积为:"); shape=new Zfx(10);break; case 's':System.out.println("以三角形为底的柱体体积为:"); shape=new Sjx(1,2,3);break; case 'j':System.out.println("以矩形为底的柱体体积为:"); shape=new Juxing(4,5);break; case 'c':System.out.println("以圆形为底的柱体体积为:"); shape=new Circle(10);break; case 't':System.out.println("以梯形为底的柱体体积为:"); shape=new TiXing(6,9,3);break; } return shape; } }
9.Test.java
/** * 创建测试类,创建一个while循环,在循环中定义一个柱体对象,并调用求体积方法输出结果 * 如果输入e则退出循环 */ package zy9; import java.util.Scanner; public class Test { public static void main(String[] args) { while(true){ //创建循环 Scanner reader=new Scanner(System.in); System.out.println("请输入图形字母:"); char c=reader.next().charAt(0); if(c=='e'){ //判断是否退出循环 System.out.println("退出循环"); return; } Cone cone=new Cone(Factory.Kg(c),10);//创建柱体对象 System.out.println(cone.getV()); //输出结果 } } }