Architecture separating model, view, and view-model.

Principle of avoiding unnecessary duplication.

Member associated with a class rather than an instance.

Creates families of related objects.

Architecture dividing software into logical layers.

Principle favoring simple solutions.

Multiple methods with the same name but different parameters.

Restricts a class to one shared instance.

Design emphasizing separation of business rules from external concerns.

Principle of avoiding functionality that is not currently needed.