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

题目:

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

一, 长方形代码(包含在yyy包内,使用接口,两个成员变量 一个求面积方法)

package yyy;
public class cfx implements Shape{
double a; //a是长
double b; //b是宽
public cfx( double a,double b){
this.a=a;
this.b=b;
}
public double getArea(){
return a*b;

}
}

二,正方形代码 (包含在yyy包内,继承cfx类, 一个求面积方法)
package yyy;
public class zheng extends cfx {

public zheng(double c) {
	super(c, c);           //正方形边长
	
}
public double getArea(){
	return a*a ;
	
}

}

三,三角形代码(包含在yyy包内,使用接口,三个成员变量 一个求面积方法)

package yyy;

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

四,梯形代码(包含在yyy包内,使用接口,三个成员变量 一个求面积方法)
package yyy;
public class tixing implements Shape {
double a;
double b;
double height;
public tixing(double a,double b,double height){
this.a=a;
this.b=b;
this.height=height;
}
public double getArea(){
return (a+b)*height/2;
}
}

五,圆形代码(包含在yyy包内,使用接口,一个成员变量 一个求面积方法)

package yyy;

public class yuan implements Shape {
double radius;
double PI=3.14;
public yuan(double radius){
this.radius=radius;
}
public double getArea(){

    return PI*radius*radius;
}

}

六,接口

package yyy;
public interface Shape {
double getArea();
}

七,工厂(使用switch判别图形进行相应的求面积算法)

package yyy;
import java.util.Scanner;

public class Factory {

static Shape getShape(char c) {
        Scanner reader = new Scanner(System.in);
        Shape shape = null;
        switch (c) {
        case 'j':
            System.out.print("请输入矩形的长和宽\n柱体的高\n");
            shape = new cfx(reader.nextDouble(), reader.nextDouble());
            break;
        case 's':
            System.out.print("请输入三角形的三条边,\n柱体的高\n");
            shape = new sanjiao(reader.nextDouble(), reader.nextDouble(), reader.nextDouble());
            break;
        case 'y':
            System.out.print("请输入圆的半径,\n柱体的高\n");
            shape = new yuan(reader.nextDouble());
            break;
        case 't':
            System.out.print("请输入梯形的上底下底\n和高\n 柱体高\nz");
            shape = new tixing(reader.nextDouble(), reader.nextDouble(), reader.nextDouble());
            break;
        case 'z':
            System.out.print("请输入正方形的边长,\n柱体的高\n");
            shape = new zheng(reader.nextDouble());
            break;
        }
        return shape;
}

}
八,Text

 package yyy;

import java.util.Scanner;

public class Test {
public static void main(String[] args) {
while(true){
Scanner reader = new Scanner(System.in);
System.out.print("请输入你选择的形状:矩形j,三角形s,圆y,梯形t,正方形z");
char c = reader.next().charAt(0);

        Cone cone = new Cone(Factory.getShape(c), reader.nextDouble());
        System.out.print(cone.getVolume());
    }
}

}

package yyy;

public class Cone {
Shape shape;
double high;

public Cone(Shape shape, double high) {
    this.shape = shape;
    this.high = high;
}
public double getVolume() {
    return shape.getArea()*high;
}

}

十,结果

posted @   杨寒冰  阅读(107)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系统下SQL Server数据库镜像配置全流程详解
· 现代计算机视觉入门之:什么是视频
· 你所不知道的 C/C++ 宏知识
· 聊一聊 操作系统蓝屏 c0000102 的故障分析
· SQL Server 内存占用高分析
阅读排行:
· 盘点!HelloGitHub 年度热门开源项目
· DeepSeek V3 两周使用总结
· 02现代计算机视觉入门之:什么是视频
· C#使用yield关键字提升迭代性能与效率
· 回顾我的软件开发经历(1)
点击右上角即可分享
微信分享提示