java – 根据用户输入确定构造函数调用

我需要向用户询问他想绘制的图中有多少边,然后调用正确的构造函数来实例化该对象.

下面是我尝试使用IF语句来解决答案(或者我可以使用一个开关),但是我不知道这是否是最好的方法,可能是Java继承和多态.

所有的类都扩展了类图.

类别图:

--------------- figure ---------------
      ^         ^             ^            ^
      |         |             |            |
      |         |             |            |
   Circle    Triangle      Rectangle     Exagone

主要类别:

import java.util.Scanner;

class Draw {

   static void main(String[] args){

       Scanner userInput = new Scanner(system.in);
       int num_sides;

       //user input
       System.out.println("How many sides has the figure you want to draw?");   
       num_sides = userInput.nextInt();


       //---> deciding what constructor to call with if statements

       if(num_sides == 0){
          figure f1 = new Circle();
       }
       else if(num_sides == 3){
          figure f1 = new Triangle(); 
       }
       //...
       else{
          System.out.println("Error. Invalid sides number");
       }


   }
}

类别编号:

class figure{

    private int sides;

    public figure(int num_sides){
       sides = num_sides;
    }
}


class Circle extends figure{

   public Circle(){
      super(0);
   }

}

//... all the other classes has the same structure of Circle

解决方法

工厂方法

你考虑过Factory Method Pattern吗?基本上,你有一个这样的方法

public figure createInstance(int numSides) {
    figure figure = null;

    switch(numSides) {
    case 0:
        figure = new Circle();
        break;
    case 3:
        // etc...
        // Make a case for each valid number of sides
        // Don't forget to put a "break;" after each case!
    default:
        // Not a valid shape; print your error message
    }
    return figure;
}

而让这种工厂方法做出决定.

相关文章

Java中的String是不可变对象 在面向对象及函数编程语言中,不...
String, StringBuffer 和 StringBuilder 可变性 String不可变...
序列化:把对象转换为字节序列的过程称为对象的序列化. 反序...
先说结论,是对象!可以继续往下看 数组是不是对象 什么是对...
为什么浮点数 float 或 double 运算的时候会有精度丢失的风险...
面试题引入 这里引申出一个经典问题,看下面代码 Integer a ...