题目:
利用接口和接口回调,实现简单工厂模式,当输入不同的字符,代表相应图形时,利用工厂类获得图形对象,再计算以该图形对象为底的柱体体积。
源程序:
/* * 创建接口,声明求面积方法 */ package f; public interface Shape { double getmianji(); }
/* * 创建一个矩形类,定义长和宽,求面积方法,返回面积 */ package f; public class Juxing implements Shape { double m; double n; public Juxing (double m,double n){ this.m=m; this.n=n; } public double getmianji(){ return m*n; } }
/* * 创建一个三角形类,定义三角形的三边长,求面积的方法 */ package f; public class San implements Shape { double a; double b; double c; public San(double a,double b,double c){ this.a=a; this.b=b; this.c=c; } public double getmianji(){ double p=(a+b+c)/2; return Math.sqrt(p*(p-a)*(p-b)*(p-c)); } }
/* * 创建一个梯形类,定义上底下底和高,求面积的方法并返回面积值 */ package f; public class Tx implements Shape { double a; double b; double h; public Tx(double a,double b,double h){ this.a=a; this.b=b; this.h=h; } public double getmianji(){ return (a+b)*h/2; } }
/* * 创建一个圆形类,定义圆形的半径,求面积的方法,返回面积值 */ package f; public class Yx implements Shape{ double r; double p=3.14; public Yx(double r){ this.r=r; } public double getmianji(){ return p*r*r; } }
/* * 创建一个正方形类定义边长,求面积的方法,返回面积值 */ package f; public class Zheng implements Shape { double a; public Zheng(double a){ super(); } public double getmianji(){ return a*a; } }
/* * 创建一个柱体类,定义图形的对象,定义柱体的高,求面积的方法 */ package f; public class Cone { Shape shape; double h; public Cone(Shape shape,double h){ this.shape=shape; this.h=h; } public double getv(){ return shape.getmianji()*h; } }
/* * 创建一个工厂类,一个方法t,输入字母判断那个图形,返回图形 */ package f; public class Factory { static Shape shape=null; public static Shape t(char c){ switch(c){ case'J': shape=new Juxing(1,2);break; case'Z': shape=new Zheng(2);break; case'S': shape=new San(4,5,6);break; case'Y': shape=new Yx(2);break; case'T': shape=new Tx(2,4, 5);break; } return shape; } }
/* * 创建主方法,输入字母,创建柱体对象,通过调用方法输出体积 */ package f; import java.util.*; public class Test { public static void main(String[] args) { System.out.println("输入图形字母为:"); Scanner reader=new Scanner(System.in); char c=reader.next().charAt(0); Factory factory=new Factory(); Cone cone=new Cone(Factory.t(c),5); System.out.println("柱体的体积是:"+cone.getv()); } }
测试运行