# Behavioral Patterns

- [Chain of Responsibility](/en/design-patterns/chain-of-responsibility.md) — Chain of Responsibility is a behavioral design pattern that lets you pass requests along a chain of handlers. Upon receiving a request, each handler decides either to process the request or to pass it to the next handler in the chain.
- [Command](/en/design-patterns/command.md) — Command is a behavioral design pattern that turns a request into a stand-alone object that contains all information about the request. This transformation lets you pass requests as a method arguments, delay or queue a request's execution, and support undoable operations.
- [Iterator](/en/design-patterns/iterator.md) — Iterator is a behavioral design pattern that lets you traverse elements of a collection without exposing its underlying representation (list, stack, tree, etc.).
- [Mediator](/en/design-patterns/mediator.md) — Mediator is a behavioral design pattern that lets you reduce chaotic dependencies between objects. The pattern restricts direct communications between the objects and forces them to collaborate only via a mediator object.
- [Memento](/en/design-patterns/memento.md) — Memento is a behavioral design pattern that lets you save and restore the previous state of an object without revealing the details of its implementation.
- [Observer](/en/design-patterns/observer.md) — Observer is a behavioral design pattern that lets you define a subscription mechanism to notify multiple objects about any events that happen to the object they're observing.
- [State](/en/design-patterns/state.md) — State is a behavioral design pattern that lets an object alter its behavior when its internal state changes. It appears as if the object changed its class.
- [Strategy](/en/design-patterns/strategy.md) — Strategy is a behavioral design pattern that lets you define a family of algorithms, put each of them into a separate class, and make their objects interchangeable.
- [Template Method](/en/design-patterns/template-method.md) — Template Method is a behavioral design pattern that defines the skeleton of an algorithm in the superclass but lets subclasses override specific steps of the algorithm without changing its structure.
- [Visitor](/en/design-patterns/visitor.md) — Visitor is a behavioral design pattern that lets you separate algorithms from the objects on which they operate.
