题目: 利用接口和接口回调,实现简单工厂模式,当输入不同的字符,代表相应图形时,利用工厂类获得图形对象,再计算以该图形为底 的柱体体积。
1.源代码
java.Shape文件
//创建了一个接口,定义了一个求面积的方法//
package cn.edu.ccut.factory;
public interface Shape {
public double getArea();
}
以下是矩形类、正方形类、梯形类、圆形类、三角形类,分别存放在java.Juxing 、 java.zheng 、 java.tixing 、 java.circle 、 java.Triangle文件中
java.Juxing文件
/**创建了一个矩形类,实现Shape接口,定义了一个成员变量长length和宽width,以及构造方法Juxing,
重写了求面积方法getArea()
**/
package cn.edu.ccut.factory;
public class Juxing implements Shape {
public double length;
public double width;
public Juxing(double length,double width){
this.length=length;
this.width=width;
}
public double getArea(){
return length*width;
}
}
java.zheng文件
/**创建了一个正方形类,实现Shape接口,定义了一个成员变量边长length,和构造方法,
重写求面积方法getArea()
**/
package cn.edu.ccut.factory;
public class zheng implements Shape {
double length;
zheng(double length){
this.length=length;
}
public double getArea(){
return length*length;
}
}
java.tixing文件
/**创建了一个梯形类,实现Shape接口,定义了三个成员变量上底shangdi、下底xiadi、高heith,
* 以及构造方法tixing(),重写了求面积方法getArea()
**/
package cn.edu.ccut.factory;
public class tixing implements Shape {
public double shangdi;
public double xiadi;
public double heigth;
public tixing(double shangdi,double xiadi,double heigth){
this.heigth=heigth;
this.shangdi=shangdi;
this.xiadi=xiadi;
}
public double getArea(){
return (shangdi+xiadi)*heigth/2;
}
}
java.circle文件
/*创建了一个圆类,实现Shape接口,定义了一个成员变量半径r,和构造方法,
重写了求面积方法getArea()
*/
package cn.edu.ccut.factory;
public class circle implements Shape {
public double r;
public circle(double r){
this.r=r;
}
public double getArea(){
return Math.PI*r*r;
}
}
java.Triangle文件
/**创建了一个三角形类,实现Shape接口,定义了三个成员变量分别为三角形的三条边a、b、c,
* 以及构造方法Triangle(),重写了求面积方法getArea()
**/
package cn.edu.ccut.factory;
public class Triangle implements Shape{
public double a;
public double b;
public double c;
public Triangle(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));
}
}
java.Factory文件
/*创建了一个工厂类Factory,主要实现通过输入不同的字符(利用Switch分支语句)进行不同对象的使用,
* 最后完成不同底的柱体体积的计算。
*/
package cn.edu.ccut.factory;
import java.util.*;
public class Factory {
Shape shape;
Scanner reader=new Scanner(System.in);
char ch=reader.next().charAt(0);
public Shape getShape(){
switch (ch) {
case \'J\':
shape =new Juxing(6,10);
break;
case \'X\':
shape=new tixing(4,6,4);
break;
case \'T\':
shape=new Triangle(3,4,5);
break;
case \'C\':
shape=new circle(6);
break;
case \'Z\':
shape=new zheng(3);
break;
}
return shape;
}
}
2 .运行截图