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

 

题目

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

代码

import java.util.Scanner;
/**
 * 工厂类,将计算工厂包装起来
 *
 */
public class Chang {
	TuXing tuxing=null;
    Scanner reader = new Scanner(System.in);
    
    public Chang(double height) {
    	ZhuTi zhuti=new ZhuTi(this.gettuxing(),height);
    	System.out.println(zhuti.getVolume());
	}
public TuXing gettuxing() {
	System.out.println("输入首字母选择柱体的底面图形:");
    char S=reader.next().charAt(0);
        switch(S) {
        case'j':System.out.println("矩形柱体的体积是:");tuxing=new JuXing(4,8);break;
        case'z':System.out.println("正方形柱体的体积是:");tuxing=new ZhengFangXing(6);break;
        case'y':System.out.println("圆形柱体的体积是:");tuxing=new Yuan(7);break;
        case's':System.out.println("三角形柱体的体积是:");tuxing=new ShanJiaoXing(5,5,5);break;
        case't':System.out.println("梯形柱体的体积是:");tuxing=new TiXing(6,2,2);break;
        }
        return tuxing;
}
}

  

/**
 * 矩形类 继承接口,求面积,以及构造方法
 *
 */
public class JuXing implements TuXing {
	double length;
	double width;

	JuXing(double length, double width) {
		this.length = length;
		this.width = width;
	}

	public double getArea() {

		return length * width;
	}
}

  

/**
 * 三角形类 继承自图形接口
 *
 */
public class ShanJiaoXing implements TuXing {

	double a;
	double b;
	double c;

	ShanJiaoXing(double a, double b, double c) {
		this.a = a;
		this.b = b;
		this.c = c;
	}

	public double getArea() {
		double d = (a + b + c) / 2;
		return Math.sqrt(d * (d - a) * (d - b) * (d - c));
	}
}

  

/**
 * 测试类
 *
 */
public class Test {
	public static void main(String[] args) {
		double high = 6;
		while (true) {
			Chang gongchang = new Chang(high);
		}
	}
}

  

/**
 * 梯形类,继承自Shape接口
 * 
 *
 */
public class TiXing implements TuXing {

	double shangdi;
	double xiadi;
	double high;

	TiXing(double shangdi, double xiadi, double high) {
		this.shangdi = shangdi;
		this.xiadi = xiadi;
		this.high = high;
	}

	public double getArea() {
		return (shangdi + xiadi) * high / 2;
	}
}

  

/**
 * 接口,一个抽象方法
 * 
 *
 */
public interface TuXing {
	abstract double getArea();
}

  

/**
 * 圆类继承图像接口
 *
 */
public class Yuan implements TuXing {
	final double P = 3.14;
	double r;

	Yuan(double r) {
		this.r = r;
	}

	public double getArea() {
		return P * r * r;
	}

}

  

/**
 * 正方形类继承Shape接口
 *
 */
public class ZhengFangXing implements TuXing {

	double chang;
	double area;

	ZhengFangXing(double chang) {
		this.chang = chang;
	}

	public double getArea() {

		return area = chang * chang;
	}

}

  

/**
 * 柱体类,一个换底方法
 * 
 * @author Administrator
 *
 */
public class ZhuTi {

	TuXing tuxing;
	double height;

	ZhuTi(TuXing tuxing, double height) {
		this.tuxing = tuxing;
		this.height = height;
	}

	void changeBase(TuXing tuxing) {
		this.tuxing = tuxing;
	}

	double getVolume() {
		return tuxing.getArea() * height;
	}
}

  运行截图

第9次作业--接口及接口回调_第1张图片

 

你可能感兴趣的:(第9次作业--接口及接口回调)