Оптимизируем кода на JAVA

100
10 ноября 2019, 00:50

Задача состоит в следующем:

Shape класс обеспечивает метод draw (...) ... для рисования фигур. Переместите метод draw (...) к Rectangle класса. Пожалуйста предложите другие решения для улучшения качества кода

public class Shape {
    private String title;
    //Other fields, constructors, get, set, etc.
    public Shape(String title) {
        this.title = title;
    }
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    private void draw(Graphics graphics, Rectangle rectangle) {
        rectangle.setVisible(false);
        graphics.setColor(rectangle.getColor());
        graphics.drawLine(rectangle.getX1(),rectangle.getY1(),rectangle.getX2(),rectangle.getY2());
        //Other code
        rectangle.setVisible(true);
    }
}

public class Rectangle{
    private int x1, y1;
    private int x2, y2;
    private Color color;
    private boolean visible;
    //Othre fields, constructors, get, set, etc

    public Rectangle(String title, int x1, int y1, int x2, int y2, Color color, boolean visible) {
        super(title);
        this.x1 = x1;
        this.y1 = y1;
        this.x2 = x2;
        this.y2 = y2;
        this.color = color;
        this.visible = visible;
    }
    public int getX1() {
        return x1;
    }
    public int getY1() {
        return y1;
    }
    public int getX2() {
        return x2;
    }
    public int getY2() {
        return y2;
    }
    public Color getColor() {
        return color;
    }
    public boolean getVisible() {
        return visible;
    }
    public void setVisible(boolean visible) {
        this.visible = visible;
    }
}

Такую задачу дал мне интервьюер

По моему мнению если я перенесу метод draw () до Rectangle класса, то можно будет с этого метода забрать параметр "Rectangle rectangle" и использовать методы не так "rectangle.setVisible (false)" а так "setVisible (false)"

Что еще здесь еще можно улучшить?

Answer 1

Такие принципы ООП как наследование и полиморфизм, были созданы для того, чтобы решать задачи подобного плана. То, что у вас написано это сплошной макаронный, не масштабируем код.

public class Example
{
   public static void main(String[] args)
   {
      Shape shape = new Rectangle(...);
      shape.draw();
   }
}
public abstract class Shape
{
   protected String title;
   public Shape(String title)
   {
      this.title = title; 
   }
   public void draw();
}
class Rectangle extends Shape
{
   private int x1, y1;
   private int x2, y2;
   private Color color;
   private boolean visible;
   public Rectangle(String title, int x1, int y1, int x2, int y2, Color color, 
   boolean visible) {
      super(title);
      this.x1 = x1;
      this.y1 = y1;
      this.x2 = x2;
      this.y2 = y2;
      this.color = color;
      this.visible = visible;
  }  
  public void draw()
  {
     // next code here 
  }
  // getters setters
}

Позже при потребности вы можете создавать и другие классы, к примеру, Triangle и т.п. И использовать правильные паттерны проектирования(например Strategy), которые работают на полиморфизме и популярны в примерах, как у вас:

public void Draw(Shape shape)
{
   shape.draw();
}
void func() 
{
   Draw(new Rectangle(...));
}

По этому, учите в первую очередь ООП, а потом идите на интервью.

READ ALSO
Как задать несколько условий для if else Jquery

Как задать несколько условий для if else Jquery

Есть код, который отвечает за отправку формы на сайте:

130
имитация нажатие на элемент select value

имитация нажатие на элемент select value

есть выпадающий список и снизу кнопки , при нажатие на кнопки выбирается из списка select по строке , мне нужно что бы выбиралось не по строке...

132
установлено display : block , а элемент не отображается

установлено display : block , а элемент не отображается

Когда я нажимаю на cancel button,скрываю div Edit и после показываю div InfoСрабатывает первое условие :

141
Как вывести значения из объекта?

Как вывести значения из объекта?

Как вывести значения из объекта в котором массивНапример tooth

168