zoukankan      html  css  js  c++  java
  • 第9次作业--接口及接口回调

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

    代码及注释:

    package Cylinder;
    import java.util.*;
    /**定义接口 接口方法;定义一个矩形类实现求面积的的接口方法;*/
    interface Shape{
        double getArea();
    }
    /**定义一个矩形类,构造方法传入值,实现求面积的的接口方法;*/
    class Rect implements Shape{
        double width;
        double length;
        Rect(double width,double length){
            this.width=width;
            this.length=length;        
        }
        public double getArea() {
            return width*length;
        }    
    }
    /**定义一个正方形类,构造方法传入值,实现求面积的的接口方法;*/
    class Square implements Shape{
        double length;
        Square(double length){
            this.length=length;
        }
        public double getArea() {
            return length*length;
        }    
    }
    /**定义一个三角形类,构造方法传入值,利用数学公式实现求面积的的接口方法;*/
    class Triangle implements Shape{
        double a,b,c;
         Triangle(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));
        }    
    }
    /**定义一个圆形类,构造方法传入值,实现求面积的的接口方法;*/
    class Circle implements Shape{
        double r;
        public Circle(double r){
            this.r=r;
        }
        public double getArea(){
            return Math.PI*r*r;
        }
    }
    /**定义一个梯形类,构造方法传入值,实现求面积的的接口方法;*/
    class Trapezoid implements Shape{
        double a,b,h;
        Trapezoid(double a,double b,double h){
            this.a=a;
            this.b=b;
            this.h=h;
        }
        public double getArea() {
            return (a+b)*h/2;
        }    
    }
    /**定义一个柱体类,构造方法传入值,定义求柱体面积的方法和换底方法*/
    class Cone{
        Shape shape;
        double high;
        Cone(Shape shape ,double high){
            this.shape=shape;
            this.high=high;        
        }
        double getVolume() {
            return shape.getArea()*high;
        }
        void  setShape(Shape shape){
            this.shape =shape;       
        }
    }
    /**定义一个工厂类,利用简单工厂模式利用Switch将需要的值传递给图形类*/
    class Factory{
        Shape shape;
        Scanner rea=new Scanner(System.in);  
        char ch=rea.next().charAt(0);
        public Shape getShape(){
            switch(ch){
            case 's': shape = new Triangle(9,3,7); break;    
            case 'c': shape = new Circle(5); break;
            case 'r': shape = new Rect(3,7); break;
            case 'z': shape = new Square(9); break;
            case 't': shape = new Trapezoid(6,3,3); break;       
            }
            return shape;
        }
    }
    /**主方法利用循环输入需要求的图形并创建对象*/
    public class Test {
         public static void main(String[] args) {
               System.out.println("输入柱体的高;");
               Scanner reader = new Scanner(System.in);
               double number = reader.nextDouble();
               for(int j=0;j<5;j++){
                   System.out.println("请选择柱体以何图形为底:");
                   Factory area=new Factory();
                   Cone volume = new Cone(area.getShape(),number);
                   volume.setShape(area.shape);
                   System.out.println(volume.getVolume());
            }
    
         }
    }

    运行截图:

  • 相关阅读:
    Python进阶文档
    Docker 启动 RabbitMQ
    Lending Club 贷款业务信用评分卡建模
    Lending Club 公司2007-2018贷款业务好坏帐分析
    Lending Club 公司2007-2018贷款业务初步分析
    电子商务网站用户行为分析及服务推荐
    机器学习实战总结
    机器学习实战 11- SVD
    机器学习实战 10-PCA
    机器学习实战 9-FP-growth算法
  • 原文地址:https://www.cnblogs.com/xushaohua/p/11662068.html
Copyright © 2011-2022 走看看