В паттернах необходимо отталкиваться от функционала. Сначала надо определиться не с тем, как сделать красивее или быстрее, а с тем что точно нужно сделать.
Если вам надо, чтобы выводился текст, который целиком зависит от данных которые привязаны к фигуре, то делайте интерфейс
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())
}
Думаю никаких паттернов вам не надо.