我需要向用户询问他想绘制的图中有多少边,然后调用正确的构造函数来实例化该对象.
下面是我尝试使用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;
- }
而让这种工厂方法做出决定.