Проста Фабрика (~Simple Factory)

Якщо конструкторів багато і вони великі (з багатьма перевірками), 

то робити кілька майже однакових конструкторів просто невигідно

Робимо один спільний приватний конструктор і багато невеличких статичних функцій

Можна відмовитися від static, але прийдеться зробити інший клас, який буде робити об'єкти нашого класу

Відсутність наслідування

class Rectangle {

     double a;

     double b;

     private Rectangle(double a, double b) {

          if (a > 0)

          {

               this.a = a;

          }

          else 

          {

               this.a = 0;

          }

          if (b > 0)

          {

               this.b = b;

          }

          else

          {

               this.b = 0;

          }

     }

     public static Rectangle LengthAndHeight(double a, double b) {  

          return new Rectangle(a, b);

     }

     public static Rectangle LengthAndAngle(double a, double angle)

     {

          double b = a * Math.Sin(angle);

          return new Rectangle(a, b);

     }

}

static void Main(string[] args)

{

     Rectangle r1 = Rectangle.LengthAndHeight(2, 4);

     Rectangle r2 = Rectangle.LengthAndAngle(2, Math.PI * 45 / 180.0);

     Console.ReadKey();

}