题目:

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

代码:

1、Test.java

 /**
* 测试类,包含一个主方法;
* 调用求体积方法输出;
*/
package cn.edu.ccut.object3; import java.util.Scanner;
public class Test { public static void main(String[] args) {
char c;
while(true){
System.out.println("请输入柱体底的形状('j'矩形、's'三角形、'z'正方形、't'梯形、'y'圆形、'F'结束程序):");
Scanner reader = new Scanner(System.in);
c = reader.next().charAt(0); //c接受字符型输入;
if(c == 'F'){ //退出程序标志;
System.out.println("程序结束!");
break;
}
factory f = new factory();
Cone cone = new Cone(f.ctrl_di(c) , 5); //定义矩形对象,根据用户输出控制底,高为5;
System.out.println("柱体体积是:"+cone.getV());
}
} }

2、factory.java

 /**
* 工厂类,实现简单工厂模式,包含一个方法;
* ctrl_di实现了根据用户输入换底;
*/
package cn.edu.ccut.object3; public class factory {
Shape shape = null;
public Shape ctrl_di(char c){ //实现了根据用户输入换底;
switch(c){
case 'j':shape = new Rec(3,4);break;
case 's':shape = new Triangle(3,4,5);break;
case 'z':shape = new Zheng(2);break;
case 't':shape = new Trapezoid(4,6,7);break;
case 'y':shape = new Circle(3);break;
default:System.out.println("error");
}
return shape;
}
}

3、Shape.java

 /**
* 图形接口;
* 定义了一个计算面积的抽象方法getArea;
*/
package cn.edu.ccut.object3; public interface Shape {
public double getArea(); //抽象方法计算面积;
}

4、Rec.java

 /**
* 矩形类,使用了图形接口,包含两个成员变量一个构造方法,并重写了getArea方法;
* 两个成员变量分别代表举行的长和宽;
* 构造方法初始化,getArea计算面积;
*/
package cn.edu.ccut.object3; public class Rec implements Shape {
double a;
double b;
Rec(double a , double b){
this.a = a;
this.b = b;
}
public double getArea(){
return (a*b);
}
}

5、Zheng.java

 /**
* 正方形类,继承了矩形类,包含两个方法;
* 构造方法初始化,getArea计算面积
*/
package cn.edu.ccut.object3; public class Zheng extends Rec {
Zheng(double a){
super(a, a); //利用super调用父类构造方法;
} public double getArea(){ //方法重写;
return (a*a);
}
}

6、Circle.java

 /**
* 圆类,使用了图形接口,包含一个成员变量,两个方法;
* 成员变量r为半径;
* 构造方法初始化,重写了getArea方法;
*/
package cn.edu.ccut.object3; public class Circle implements Shape{
double r; public Circle(double r){
this.r = r;
}
public double getArea(){
return (Math.PI*r*r);
}
}

7、Triangle.java

 /**
* 三角形类,使用了图形接口,包含了三个成员变量,两个方法;
* 成员变量a,b,c分别代表三角形的三个边;
* 构造方法初始化,重写了getArea方法;
*/
package cn.edu.ccut.object3; public class Triangle implements Shape{
double a;
double b;
double c; public Triangle (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));
}
}

8、Trapezoid.java

 /**
* 梯形类,使用了图形接口,包含三个成员变量,两个方法;
* 成员变量a,b代表梯形的上底和下底,high代表高;
* 构造方法,重写getArea;
*/
package cn.edu.ccut.object3; public class Trapezoid implements Shape{
double a;
double b;
double high; public Trapezoid(double a , double b , double high){
this.a = a;
this.b = b;
this.high = high;
}
public double getArea(){
return (((a + b) * high) / 2);
}
}

9、Cone.java

 /**
* 柱体类,两个成员变量,三个方法;
* 成员变量shape代表底,high代表高;
* 构造方法初始化,getV计算柱体体积,setDi可用于换底;
*/
package cn.edu.ccut.object3; public class Cone {
Shape shape;
double high;
public Cone(Shape shape , double high){
this.shape = shape;
this.high = high;
}
public double getV(){
return (shape.getArea()*high);
}
public void setDi(Shape shape){ //利用修改器换底
this.shape = shape;
}
}

运行结果:

最新文章

  1. 最近在玩linux时 yum 遇到了问题
  2. SQLSERVER单表CRUD通用方法
  3. Vagrant入门
  4. 解决:error: Cannot fetch repo (TypeError: expected string or buffer)
  5. jq实现 按钮点击一次后 3秒后在可点击
  6. ANT 环境搭建
  7. HDU 2289 CUP 二分
  8. Html5新标签解释及用法
  9. 一个IO的传奇一生 系列 存储之道
  10. 详解Android动画之Frame Animation
  11. Traffic Lights - SGU 103(最短路)
  12. 颜色rgb
  13. jQuery Ajax: $.post请求示例
  14. asp.net网站管理工具 遇到错误。请返回上一页并重试。
  15. Monggodb基础
  16. nginx 卸载后重新安装/etc/nginx配置文件没了,cannot open /etc/nginx/nginx.conf (No such file or directory)
  17. Jumpserver 介绍
  18. spring @Bean注解解释
  19. python 百度图片爬虫
  20. [面试]CVTE 2019提前批 Windows应用开发一面

热门文章

  1. HDU3394 Railway 题解(边双连通分量)
  2. Spring中常见的设计模式——模板模式
  3. Pandas 数据分析,高中体测练习
  4. 到底如何配置 maven 编译插件的 JDK 版本
  5. window 10 安装Oracle odac 64位
  6. 2019 牛客国庆集训day1 2019 点分治
  7. Python工具类(一)—— 操作Mysql数据库
  8. ES.01.Elasticsearch安装配置
  9. python 快速创建字典 fromkes()
  10. 修改现有消息类让.net core项目支持Protobuf - 【无需使用 [ProtoBuf.ProtoContract] 的方法】