Autumn SALE
Посредник

Посредник на C#

Посредник — это поведенческий паттерн, который упрощает коммуникацию между компонентами системы.

Посредник убирает прямые связи между отдельными компонентами, заставляя их общаться друг с другом через себя.

Сложность:

Популярность:

Применимость: Пожалуй, самое популярное применение Посредника в C#-коде — это связь нескольких компонентов GUI одной программы.

Концептуальный пример

Этот пример показывает структуру паттерна Посредник, а именно — из каких классов он состоит, какие роли эти классы выполняют и как они взаимодействуют друг с другом.

Program.cs: Пример структуры паттерна

using System; namespace RefactoringGuru.DesignPatterns.Mediator.Conceptual { // Интерфейс Посредника предоставляет метод, используемый компонентами для // уведомления посредника о различных событиях. Посредник может реагировать // на эти события и передавать исполнение другим компонентам. public interface IMediator { void Notify(object sender, string ev); } // Конкретные Посредники реализуют совместное поведение, координируя // отдельные компоненты. class ConcreteMediator : IMediator { private Component1 _component1; private Component2 _component2; public ConcreteMediator(Component1 component1, Component2 component2) { this._component1 = component1; this._component1.SetMediator(this); this._component2 = component2; this._component2.SetMediator(this); } public void Notify(object sender, string ev) { if (ev == "A") { Console.WriteLine("Mediator reacts on A and triggers following operations:"); this._component2.DoC(); } if (ev == "D") { Console.WriteLine("Mediator reacts on D and triggers following operations:"); this._component1.DoB(); this._component2.DoC(); } } } // Базовый Компонент обеспечивает базовую функциональность хранения // экземпляра посредника внутри объектов компонентов. class BaseComponent { protected IMediator _mediator; public BaseComponent(IMediator mediator = null) { this._mediator = mediator; } public void SetMediator(IMediator mediator) { this._mediator = mediator; } } // Конкретные Компоненты реализуют различную функциональность. Они не // зависят от других компонентов. Они также не зависят от каких-либо // конкретных классов посредников. class Component1 : BaseComponent { public void DoA() { Console.WriteLine("Component 1 does A."); this._mediator.Notify(this, "A"); } public void DoB() { Console.WriteLine("Component 1 does B."); this._mediator.Notify(this, "B"); } } class Component2 : BaseComponent { public void DoC() { Console.WriteLine("Component 2 does C."); this._mediator.Notify(this, "C"); } public void DoD() { Console.WriteLine("Component 2 does D."); this._mediator.Notify(this, "D"); } } class Program { static void Main(string[] args) { // Клиентский код. Component1 component1 = new Component1(); Component2 component2 = new Component2(); new ConcreteMediator(component1, component2); Console.WriteLine("Client triggers operation A."); component1.DoA(); Console.WriteLine(); Console.WriteLine("Client triggers operation D."); component2.DoD(); } } } 

Output.txt: Результат выполнения

Client triggers operation A. Component 1 does A. Mediator reacts on A and triggers following operations: Component 2 does C. Client triggers operation D. Component 2 does D. Mediator reacts on D and triggers following operations: Component 1 does B. Component 2 does C. 

Посредник на других языках программирования

Посредник на C++ Посредник на Go Посредник на Java Посредник на PHP Посредник на Python Посредник на Ruby Посредник на Rust Посредник на Swift Посредник на TypeScript