Конструктор - это паттерн

Согласен с Иваном Кузьмицким: конструктор - это действительнопаттерн. Паттернсоздания экземпляра класса (объекта)(instantiation), который состоит из последовательного выполнения двух шагов:
Выделения памяти (allocation).Инициализации (initialization).В большинстве популярных языков этот паттерн действительно оформлен в отдельный языковой конструкт, но, замечу, что не во всех. Скажем, в Objective-C, создание объекта осуществляется явным последовательным вызовом двух методов с говорящими именами alloc и init:
## Код:
```
Foo *f = [[Foo alloc] init];
```
При этом существует и метод new (конструктор как отдельный языковой конструкт), который объединяет действия alloc и init:
## Код:
```
Foo *f = [Foo new];
```
однако, его использование считается менее предпочтительным, потому что он, во-первых, не поддерживает различные дополнительные инициализаторы (initWithString там всякие), а во-вторых, считается менее наглядным.

Конструктор требует дисциплины, если не облачён в отдельный конструкт

Так же отмечу, что приведённая выше в качестве примера идиома alloc-init из Objective-C, которая суть есть реализация паттерна "конструктор", требует определённой дисциплины от программиста. Например, язык в принципе позволяет только выделить память под объект, не инициализируя его,
## Код:
```
Foo *f = [Foo alloc];
```
поэтому программист обязан до автоматизма заучить суть паттерна "конструктор": создание экземпляра класса = выделение памяти + инициализация (instantiation = allocation + initialization). Или ещё пример: метод init в подклассе сначала обязан вызывать метод init родительского класса:
## Код:
```
- (id)init {
    self = [super init];
    ...
    return self;
}
```
И все эти правила по сути, конечно, не что иное, как составные части паттерна "конструктор".