Design Patterns in .NET

Design patterns are recurring solutions to recurring problems in software architecture.

The following are the three main categories of design patterns:

  • Creational Patterns: Creational patterns provide ways to instantiate single objects or group of related objects.
  • Structural Patterns: Structural patterns provide a way to define relationships among classes and objects.
  • Behavioral Patterns: Behavioral Patterns define ways of communication among classes and objects.

The name of a patterns is in one of the categories.

Creational Patterns

  • Abstract Factory: Creates an instance of several families of classes
  • Builder: Separates object construction from its representation
  • Factory Method: Creates an instance of several derived classes
  • Prototype: A fully initialized instance to be copied or cloned
  • Singleton: A class in which only a single instance can exist

Structural Patterns

  • Adapter: Match interfaces of various classes.
  • Bridge: Separates an object's interface from its implementation.
  • Composite: A tree structure of simple and composite objects.
  • Decorator: Add responsibilities to objects dynamically.
  • Façade: A single class that represents an entire subsystem.
  • Flyweight: A fine-grained instance used for efficient sharing.
  • Proxy: An object representing another object.

Behavioral Patterns

  • Mediator: Defines simplified communication among classes.
  • Memento: Capture and restore an object's internal state.
  • Interpreter: A way to include language elements in a program.
  • Iterator: Sequentially access the elements of a collection.
  • Chain of Resp: A way of passing a request among a chain of objects.
  • Command: Encapsulates a command request as an object.
  • State: Alter an object's behavior when its state changes.
  • Strategy: Encapsulates an algorithm inside a class.
  • Observer: A way of notifying a change to a number of classes.
  • Template Method: Defers the exact steps of an algorithm to a subclass.
  • Visitor: Defines a new operation to a class without change.