#include #include class Colleague ; class Mediator ; class ConcreteMediator ; class ConcreteColleague1 ; class ConcreteColleague2 ; class Mediator { public : virtual void Send ( std :: string const & message , Colleague * colleague ) const = 0 ; }; class Colleague { protected : Mediator * mediator_ ; public : explicit Colleague ( Mediator * mediator ) : mediator_ ( mediator ) { } }; class ConcreteColleague1 : public Colleague { public : explicit ConcreteColleague1 ( Mediator * mediator ) : Colleague ( mediator ) { } void Send ( std :: string const & message ) { mediator_ - Send ( message , this ); } void Notify ( std :: string const & message ) { std :: cout Адаптер Выделение частного класса данных Декоратор Заместитель Компоновщик Мост Приспособленец Фасад Поведенческие Текущая версия страницы пока не проверялась опытными участниками и может значительно отличаться от версии, проверенной 16 марта 2014; Интерпретатор Итератор Команда Наблюдатель Посетитель Посредник Состояние Стратегия Хранитель Null Object Цепочка обязанностей Шаблонный метод Параллельного Посредник ( англ. Mediator) поведенческий шаблон проектирования, обеспечивающий взаимодействие множества объектов, формируя при этом слабую связанность и избавляя объекты от необходимости явно ссылаться друг на друга.
Шаблон для медиатора - Кодекс знаний омск результаты
проект строительства в деревне юдино одинцовского района
заявление опек уронили цены на нефть
Персональные инструменты Текущие события Мобильная версия Проблема [ править править вики-текст ] 6.1 Пример на PHP5
инструкция витрум пренатал
UML диаграмма, описывающая структуру шаблона проектирования Посредник Политика конфиденциальности 3 Преимущества Делегирования Интерфейс Неизменяемый объект Функционального дизайна Порождающие Создать объект, инкапсулирующий способ взаимодействия множества объектов. Преимущества [ править править вики-текст ]
программирования Последнее изменение этой страницы: 12:33, 16 марта 2015. Текст доступен по лицензии Creative Commons Attribution-ShareAlike ; в отдельных случаях могут действовать дополнительные условия. Случайная статья Ссылки сюда
Посредник определяет интерфейс для обмена информацией с объектами Коллеги, Конкретный посредник координирует действия объектов Коллеги. Каждый класс Коллеги знает о своем объекте Посредник, все Коллеги обмениваются информацией только с посредником, при его отсутствии им пришлось бы обмениваться информацией напрямую. Коллеги посылают запросы посреднику и получают запросы от него. Посредник реализует кооперативное поведение, пересылая каждый запрос одному или нескольким Коллегам. Примеры [ править править вики-текст ] Пример на PHP5 [ править править вики-текст ] Избранные статьи Mediator pattern Structural example using System ; namespace DoFactory.GangOfFour.Mediatorural { MainApp startup class for Structural Mediator Design Pattern. class MainApp { Entry point into console application. static void Main () { ConcreteMediator m = new ConcreteMediator (); ConcreteColleague1 c1 = new ConcreteColleague1 ( m ); ConcreteColleague2 c2 = new ConcreteColleague2 ( m ); m. Colleague1 = c1 ; m. Colleague2 = c2 ; c1. Send ( How are you? ); c2. Send ( Fine, thanks ); Wait for user Console. ReadKey (); } } The 'Mediator' abstract class abstract class Mediator { public abstract void Send ( string message , Colleague colleague ); } The 'ConcreteMediator' class class ConcreteMediator : Mediator { public ConcreteColleague1 Colleague1 { private get ; set ; } public ConcreteColleague2 Colleague2 { private get ; set ; } public override void Send ( string message , Colleague colleague ) { if ( colleague == Colleague1 ) { Colleague2. Notify ( message ); } else { Colleague1. Notify ( message ); } } } The 'Colleague' abstract class abstract class Colleague { protected Mediator mediator ; Constructor public Colleague ( Mediator mediator ) { this. mediator = mediator ; } } A 'ConcreteColleague' class class ConcreteColleague1 : Colleague { Constructor public ConcreteColleague1 ( Mediator mediator ) : base ( mediator ) { } public void Send ( string message ) { mediator. Send ( message , this ); } public void Notify ( string message ) { Console. WriteLine ( Colleague1 gets message: + message ); } } A 'ConcreteColleague' class class ConcreteColleague2 : Colleague { Constructor public ConcreteColleague2 ( Mediator mediator ) : base ( mediator ) { } public void Send ( string message ) { mediator. Send ( message , this ); } public void Notify ( string message ) { Console. WriteLine ( Colleague2 gets message: + message ); } } } Output Colleague2 gets message : How are you ? Colleague1 gets message : Fine , thanks Пример на C++ [ править править вики-текст ] Связанные правки Пожертвования
Создать учтную запись Классы Colleague – Коллеги Описание [ править править вики-текст ] ConcreteMediator – Конкретный посредник Элемент Викиданных Указатель А??Я
переборки нищета
Устраняется связанность между Коллегами, централизуется управление. Структура [ править править вики-текст ] 6.3 Пример на C# Описание Википедии Портал сообщества 6.4 Пример на C++
У этого термина существуют и другие значения, см. Посредник. Шаблон проектирования Посредник Mediator Тип: Паттерны для масштабируемых JavaScript-приложений. Глава 10. Паттерн Медиатор описание, пример реализации. Шаблоны проектирования Основные 6.2 Пример на Java program MediatorExample ; {$APPTYPE CONSOLE} type IColleague = interface procedure Send ( AMessage : string ) ; procedure Notify ( AMessage : string ) ; end ; TMediator = class procedure Send ( AMessage : string ; ACollegue : IColleague ) ; virtual ; abstract ; end ; TConcreteMediator = class ( TMediator ) public FCollegue1 : IColleague ; FCollegue2 : IColleague ; procedure Send ( AMessage : string ; ACollegue : IColleague ) ; override ; end ; TColleague = class ( TInterfacedObject , IColleague ) public FMediator : TMediator ; constructor Create ( AMediator : TMediator ) ; procedure Send ( AMessage : string ) ; virtual ; abstract ; procedure Notify ( AMessage : string ) ; virtual ; abstract ; end ; ConcreteColleague1 = class ( TColleague ) procedure Send ( AMessage : string ) ; override ; procedure Notify ( AMessage : string ) ; override ; end ; ConcreteColleague2 = class ( TColleague ) procedure Send ( AMessage : string ) ; override ; procedure Notify ( AMessage : string ) ; override ; end ; { TConcreteMediator } procedure TConcreteMediator. Send ( AMessage : string ; ACollegue : IColleague ) ; begin if ACollegue = FCollegue1 then FCollegue2. Notify ( AMessage ) else FCollegue1. Notify ( AMessage ) ; end ; { TColleague } constructor TColleague. Create ( AMediator : TMediator ) ; begin FMediator := AMediator ; end ; { ConcreteColleague1 } procedure ConcreteColleague1. Send ( AMessage : string ) ; begin FMediator. Send ( AMessage , Self ) ; end ; procedure ConcreteColleague1. Notify ( AMessage : string ) ; begin Writeln ( 'Colleague1 gets message: ' + AMessage ) ; end ; { ConcreteColleague2 } procedure ConcreteColleague2. Send ( AMessage : string ) ; begin FMediator. Send ( AMessage , Self ) ; end ; procedure ConcreteColleague2. Notify ( AMessage : string ) ; begin Writeln ( 'Colleague2 gets message: ' + AMessage ) ; end ; var Mediator : TConcreteMediator ; Colleague1 : ConcreteColleague1 ; Colleague2 : ConcreteColleague2 ; begin Mediator := TConcreteMediator. Create ; Colleague1 := ConcreteColleague1. Create ( Mediator ) ; Colleague2 := ConcreteColleague2. Create ( Mediator ) ; Mediator. FCollegue1 := Colleague1 ; Mediator. FCollegue2 := Colleague2 ; Colleague1. Send ( 'How are you?' ) ; Colleague2. Send ( 'Fine, thanks' ) ; Readln ; end. Ссылки [ править править вики-текст ] проверки требуют 3 правки.
Цитировать страницу Спецстраницы Блокировка с двойной проверкой Однопоточное выполнение Планировщик Поставщик-потребитель Активный объект Постоянная ссылка Разработчики
Сведения остранице Паттерн Mediator (посредник) назначение, описание, особенности и реализация на С++. Сообщить об ошибке Свяжитесь с нами абстрактный класс посредник abstract class Mediator { ** * Отправка сообщения {@code message} указанному получателю {@code colleague} * @param string message отправляемое сообщение * @param Colleague colleague отправитель сообщения * public abstract function send ( $message , Colleague $colleague ); } абстрактный класс коллега abstract class Colleague { protected $mediator ; public function __construct ( Mediator $mediator ) { $this - mediator = $mediator ; } ** * Отправка сообщения посредством посредника * @param string message сообщение * public function send ( $message ){ $this - mediator - send ( $message , $this ); } ** * Обработка полученного сообщения реализуется каждым конкретным * наследником * @param string message получаемое сообщение * public abstract function notify ( $message ); } class ConcreteMediator extends Mediator { private $colleague1 ; private $colleague2 ; public function setColleague1 ( ConcreteColleague1 $colleague ){ $this - colleague1 = $colleague ; } public function setColleague2 ( ConcreteColleague2 $colleague ){ $this - colleague2 = $colleague ; } public function send ( $message , Colleague $colleague ) { if ( $colleague == $this - colleague1 ) { $this - colleague2 - notify ( $message ); } else { $this - colleague1 - notify ( $message ); } } } коллега 1 class ConcreteColleague1 extends Colleague { public function notify ( $message ) { echo sprintf ( Collegue1 gets message: %s n , $message ); } } коллега 2 class ConcreteColleague2 extends Colleague { public function notify ( $message ) { echo sprintf ( Collegue2 gets message: %s n , $message ); } } $mediator = new ConcreteMediator (); $collegue1 = new ConcreteColleague1 ( $mediator ); $collegue2 = new ConcreteColleague2 ( $mediator ); $mediator - setColleague1 ( $collegue1 ); $mediator - setColleague2 ( $collegue2 ); $collegue1 - send ( 'How are you ?' ); $collegue2 - send ( 'Fine, thanks!' ); Пример на Java [ править править вики-текст ]