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


    一、题目

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

    二、代码

    1.Shape.java

    /**
     * 创建图形接口,声明求面积方法
     */
    package zy9;
    
    public interface Shape {
        double getArea();
    }

    2.Juxing.java

    /**
     * 创建矩形类,定义成员变量和求面积方法
     */
    package zy9;
    
    public class Juxing implements Shape{
        double a;
        double b;
        public Juxing(double a,double b){
            this.a=a;
            this.b=b;
        }
        public double getArea(){
            return a*b;
        }
    }

    3.Zfx.java

    /**
     * 创建正方形类继承矩形类,创建有参、无参构造方法和求面积方法
     */
    package zy9;
    
    public class Zfx extends Juxing{
        public Zfx(double a){
            super(a,a);
        }
        public Zfx(){
            super(0,0);
        }
        public double getArea(){
            return a*a;
        }
    }

    4.Sjx.java

    /**
     * 创建三角形类,定义成员变量和求面积方法
     */
    package zy9;
    
    public class Sjx implements Shape{
        double a;
        double b;
        double c;
        public Sjx(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));
        }
    }

    5.Circle.java

    /**
     * 创建圆形类,定义成员变量、构造方法和求面积方法
     */
    package zy9;
    
    public class Circle implements Shape{
        double r;
        public Circle(double r){
            this.r=r;
        }
        public double getArea(){
            return Math.PI*r*r;
        }
    }

    6.TiXing.java

    /**
     * 创建梯形类,定义成员变量和求面积方法
     */
    package zy9;
    
    public class TiXing implements Shape{
        double a;
        double b;
        double 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;
        }
    }

    7.Cone.java

    /**
     * 创建柱体类,定义图形对象和高,创建构造方法和求体积方法
     */
    package zy9;
    
    public class Cone {
        Shape shape;
        double h;
        public Cone(Shape shape,double h){
            this.h=h;
            this.shape=shape;
        }
        public double getV(){
            return shape.getArea()*h;//接口回调
        }
        
    }

    8.Factory.java

    /**
     * 创建工厂类,定义图形对象,创建Kg方法,方法中写一个开关方法,返回图形对象
     */
    package zy9;
    
    public class Factory {
        static Shape shape=null;
        public static Shape Kg(char c){
            switch(c){
            case 'z':System.out.println("以正方形为底的柱体体积为:"); shape=new Zfx(10);break;
            case 's':System.out.println("以三角形为底的柱体体积为:"); shape=new Sjx(1,2,3);break;
            case 'j':System.out.println("以矩形为底的柱体体积为:"); shape=new Juxing(4,5);break;
            case 'c':System.out.println("以圆形为底的柱体体积为:"); shape=new Circle(10);break;
            case 't':System.out.println("以梯形为底的柱体体积为:"); shape=new TiXing(6,9,3);break;
            }
            return shape;
        }
    }

    9.Test.java

    /**
     * 创建测试类,创建一个while循环,在循环中定义一个柱体对象,并调用求体积方法输出结果
     * 如果输入e则退出循环
     */
    package zy9;
    
    import java.util.Scanner;
    
    public class Test {
    
        public static void main(String[] args) {
            while(true){                    //创建循环
            Scanner reader=new Scanner(System.in);
            System.out.println("请输入图形字母:");
            char c=reader.next().charAt(0);
            if(c=='e'){                    //判断是否退出循环
                System.out.println("退出循环");
                return;
            }
            Cone cone=new Cone(Factory.Kg(c),10);//创建柱体对象
            System.out.println(cone.getV());      //输出结果
            
            }
        }
    
    }

    三、运行结果

  • 相关阅读:
    仿京东实现购物车页面中结算的动态滚动效果
    css reset的重置作用(可取还是不可取,取决于你)
    动态获取半弧的高度
    对话框以及延伸的时间轴展示
    移动前端meta
    解决相关css基础问题
    根据屏幕高度自适应页面高度
    数组比大小
    微信小程序如何解析html内容
    js调用局部打印功能并还原
  • 原文地址:https://www.cnblogs.com/weiyiren666/p/11611761.html
Copyright © 2020-2023  润新知