第九次作业--接口及接口回调

题目: 利用接口和接口回调,实现简单工厂模式,当输入不同的字符,代表相应图形时,利用工厂类获得图形对象,再计算以该图形为底 的柱体体积。

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 .运行截图

 

 

猜你喜欢

转载自www.cnblogs.com/gywx/p/11644228.html