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

题目:

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

代码:

package com.ccut.java;

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

package com.ccut.java;

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

    double chang;
    double mianji;

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

    public double getArea() {

        return mianji = chang * chang;
    }

}
package com.ccut.java;

/**
 * 圆类继承图像接口
 *
 */
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;
    }

}
package com.ccut.java;

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

    double shangdi;
    double xiadi;
    double gao;

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

    public double getArea() {
        return (shangdi + xiadi) * gao / 2;
    }
}
package com.ccut.java;

/**
 * 三角形类 继承自图形接口
 *
 */
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));
    }
}
package com.ccut.java;

/**
 * 矩形类 继承接口,求面积,以及构造方法
 *
 */
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;
    }
}
package com.ccut.java;

/**
 * 柱体类,一个换底方法
 * 
 */
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;
    }
}
package com.ccut.java;

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

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

 

截图:

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

 

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