Задать вопрос
@Lisik

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

У меня есть интерфейс Shape, в котором определены несколько переменных (Area, Perimeter) и несколько методов (GetArea, GetPerimeter).
После этого я создаю фигуры, наследуя вышеописанный интерфейс (например: public class Square : Shapes).
Но вот при выводе этих фигур (т.е. информации о них, такой как периметр, площадь и т.д.) у меня возникает вопрос: как это сделать красиво и правильно?
Вывод фигур я организовал через switch:
public class Show
    {
        public static void Display(Shape shape)
        {
            string shp = shape.ToString();

            switch (shp)
            {
                case "Shapes.Square":
                    Console.WriteLine($"This figure is square. ■\nIts area is {Shape.GetArea(shape)}.\nIts perimeter is {Shape.GetPerimeter(shape)}.\n\n");
                    break;
                default:
                    break;
            }
        }
    }


Но может случится такое, что этих фигур будет очень много, и для каждой прописывать свой case будет издевательством. Вот тут я и задумался над каким-нибудь архитектурным паттерном, который поможет грамотно организовать все это.

P.S. Паттерны смотрел на сайте refactoring.guru, но так и не надумал, какой же лучше https://refactoring.guru/ru/design-patterns/catalog
  • Вопрос задан
  • 176 просмотров
Подписаться 2 Простой 3 комментария
Решения вопроса 1
insighter
@insighter
-First time? - Huh? (C#, React, JS)
В паттернах необходимо отталкиваться от функционала. Сначала надо определиться не с тем, как сделать красивее или быстрее, а с тем что точно нужно сделать.
Если вам надо, чтобы выводился текст, который целиком зависит от данных которые привязаны к фигуре, то делайте интерфейс
public interface ITalkingShape
{
string SayAboutYourself();
}

public class Square : ITalkingShape
{
  string SayAboutYourself()
  {
    return $"figure is square. ■\nIts area is {Shape.GetArea(shape)}.\nIts perimeter is {Shape.GetPerimeter(shape)}.\n\n";
  }
}

public static void Display(ITalkingShape shape)
        { 
Console.WriteLine(shape.SayAboutYourself())
}


Думаю никаких паттернов вам не надо.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
GavriKos
@GavriKos
Ну самое примитивное - фигура должна сама о себе предоставлять информацию. Т.е. у Shape нужен метод GetInfo.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы