胡昊—第9次作业--接口及接口回调

一、题目:

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

二、代码:

定义接口  Shape

package tiji;

public interface Shape {
	public double getArea();
}

  

定义 矩形类,调用Shape接口  

package tiji;

public class JvXing implements Shape {
	public double width;
	public double length;
	
	public JvXing(double width,double length){
		this.width=width;
		this.length=length;
	}
	
	public double getArea(){
		return width*length;
	}
}

定义三角类,调用Shape接口  

package tiji;

public class SanJiao implements Shape{
	double a,b,c;
	
	public SanJiao(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));
	}
	
}

定义梯形类,调用Shape接口

package tiji;

public class TiXing implements Shape {
	double a,b,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;
	}
}

定义圆形类,调用Shape接口  

package tiji;

public class Yuan implements Shape{
	double r;
	
	public Yuan(double r){
		this.r=r;
	}
	
	public double getArea() {
		return 3.14*r*r;
	}
	
}

  

 定义正方形类,继承矩形类

package tiji;

public class ZhengFang extends JvXing{
	
	public ZhengFang(double a) {
		super(a, a);
	}
	
	public double getArea(){
		return width*width;
	}
}

定义柱体类,实现求体积和换底求体积的功能  

package tiji;

public class ZhuTi  {
	Shape shape;
	double height;
	
	public ZhuTi(Shape shape,double height){
		this.shape=shape;
		this.height=height;
	}
	
	public double getV(){
		return shape.getArea()*height;
	}
	
	public void changeShape(Shape shape){
		this.shape=shape;
	}
}

定义工厂类,实现通过输入的字符,自动创建对应类型的对象  

package tiji;

public class factory {
	//Scanner r=new Scanner(System.in);
	Shape getShape(char c){
		Shape shape=null;
		
		switch(c){
			case 'j':shape=new JvXing(5,6);break;
			case 's':shape=new SanJiao(5,6,7);break;
			case 't':shape=new TiXing(4,5,6);break;
			case 'y':shape=new Yuan(5);break;
			case 'z':shape=new ZhengFang(5);break;
		}
		return shape;
	}
	
}

主类,程序的 入口  

package tiji;
import java.util.*;
import tiji.ZhuTi;
import tiji.factory;

public class test {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Scanner r=new Scanner(System.in);
		char c=r.next().charAt(0);
		factory f=new factory();
		f.getShape(c);
		ZhuTi z=new ZhuTi(f.getShape(c),5);
		System.out.println("体积是:"+z.getV());
		System.out.print("请输入柱体新底的类型:");
		c=r.next().charAt(0);
		z.changeShape(f.getShape(c));
		System.out.println("换底后的体积:"+z.getV());
	}

}  


三、实现

  

原文地址:https://www.cnblogs.com/whohow/p/11607262.html