Как провести рефакторинг этих классов для взаимодействия друг с другом?

Мое требование - использовать имя фигуры и нарисовать эту фигуру с размерами, как в методе. Draw('rectangle', 'l:10,w:20');,

  1. Должна быть проверка размеров по типу фигуры.
  2. Эти классы могут быть реорганизованы, чтобы добавить больше классов или изменить иерархию.
  3. Не следует использовать проверку во время выполнения, такую ​​как отражение. Проблема должна быть решена только с дизайном класса.
  4. Не использовать if-else или же switch операторы в методе client Draw,

Требование:

public static void main()
{
    // Provide the shape and it's dimensions
    Draw('rectangle', 'l:10,w:20');
    Draw('circle', 'r:15');
}

Я создал следующие классы. Я рассмотрел низкую (слабую) связь и высокую сплоченность, создав две иерархии классов, чтобы они могли расти самостоятельно. Я сохранил обязанности рисования для одного класса и создания измерения для другого класса.

Мой вопрос о создании этих объектов и взаимодействии друг с другом для достижения моих требований.

public abstract class Shape()
{
    Dimension dimension;
    public void abstract SetDimentions(Dimension dimension);
    public void abstract Draw()
}

public void Rectangle()
{
    void override SetDimensions(RectangleDimension dimension)
    {
    }

    void override Draw()
    {
        // Use the 'dimention' to draw
    }
}

public void Circle()
{
    void override SetDimensions(CircleDimension dimension)
    {
    }

    void override Draw()
    {
        // Use the 'dimention' to draw
    }
}

public class RectangleDimension
{
    public int length {get; set; }
    public int width { get; set; }
}

public class CircleDimension
{
    public int circle { get; set; }
}

1 ответ

Решение

Вам нужно будет использовать отражение в любой технологии ООП, которую вы используете. Вы получаете String лайк "circle" и вам нужно вызвать метод с этим именем.

Вот как вы можете сделать это в Java, и так вы можете сделать это в C#.

Другие вопросы по тегам