Mediator

Материал из Seo Wiki - Поисковая Оптимизация и Программирование
Перейти к навигацииПерейти к поиску

Шаблон Mediator(также известный как Посредник) – Шаблон проектирования

Поведенческий шаблон (Behavioral).

Обеспечивает взаимодействие множества объектов, сформировав при этом слабую связанность и избавив объекты от необходимости явно ссылаться друг на друга.

Проблема

Обеспечить взаимодействие множества объектов, сформировав при этом слабую связанность и избавив объекты от необходимости явно ссылаться друг на друга.

Решение

Создать объект, инкапсулирующий способ взаимодействия множества объектов.

Преимущества

Устраняется связанность между "Коллегами", централизуется управление.

Структура

Файл:Mediator design pattern.png
UML диаграмма, описывающая структуру шаблона проектирования Посредник
  • Mediator – "Посредник"
  • ConcreteMediator – "Конкретный посредник"
  • Классы Colleague – "Коллеги"

Описание

"Посредник" определяет интерфейс для обмена информацией с объектами "Коллеги", "Конкретный посредник" координирует действия объектов "Коллеги". Каждый класс "Коллеги" знает о своем объекте "Посредник", все "Коллеги" обмениваются информацией только с посредником, при его отсутствии им пришлось бы обмениваться информацией напрямую. "Коллеги" посылают запросы посреднику и получают запросы от него. "Посредник" реализует кооперативное поведение, пересылая каждый запрос одному или нескольким "Коллегам".

Пример на языке Java

<source lang="java">

//Интерфейс для коллег interface Command {

   void execute();

}

//Конкретный посредник class Mediator {

   BtnView btnView;
   BtnSearch btnSearch;
   BtnBook btnBook;
   LblDisplay show;
   //....
   void registerView(BtnView v) {
       btnView = v;
   }
   void registerSearch(BtnSearch s) {
       btnSearch = s;
   }
   void registerBook(BtnBook b) {
       btnBook = b;
   }
   void registerDisplay(LblDisplay d) {
       show = d;
   }
   void book() {
       btnBook.setEnabled(false);
       btnView.setEnabled(true);
       btnSearch.setEnabled(true);
       show.setText("booking...");
   }
   void view() {
       btnView.setEnabled(false);
       btnSearch.setEnabled(true);
       btnBook.setEnabled(true);
       show.setText("viewing...");
   }
   void search() {
       btnSearch.setEnabled(false);
       btnView.setEnabled(true);
       btnBook.setEnabled(true);
       show.setText("searching...");
   }
   

}

// class BtnView extends JButton implements Command {

   Mediator med;
   BtnView(ActionListener al, Mediator m) {
       super("View");
       addActionListener(al);
       med = m;
       med.registerView(this);
   }
   public void execute() {
       med.view();
   }
   

}

//Конкретный коллега class BtnSearch extends JButton implements Command {

   Mediator med;
   BtnSearch(ActionListener al, Mediator m) {
       super("Search");
       addActionListener(al);
       med = m;
       med.registerSearch(this);
   }
   public void execute() {
       med.search();
   }
   

}

//Конкретный коллега class BtnBook extends JButton implements Command {

   Mediator med;
   BtnBook(ActionListener al, Mediator m) {
       super("Book");
       addActionListener(al);
       med = m;
       med.registerBook(this);
   }
   public void execute() {
       med.book();
   }

}

class LblDisplay extends JLabel {

   Mediator med;
   LblDisplay(Mediator m) {
       super("Just start...");
       med = m;
       med.registerDisplay(this);
       setFont(new Font("Arial", Font.BOLD, 24));
   }

}

class MediatorDemo extends JFrame implements ActionListener {

   Mediator med = new Mediator();
   MediatorDemo() {
       JPanel p = new JPanel();
       p.add(new BtnView(this, med));
       p.add(new BtnBook(this, med));
       p.add(new BtnSearch(this, med));
       getContentPane().add(new LblDisplay(med), "North");
       getContentPane().add(p, "South");
       setSize(400, 200);
       setVisible(true);
   }
   public void actionPerformed(ActionEvent ae) {
       Command comd = (Command) ae.getSource();
       comd.execute();
   }
   public static void main(String[] args) {
       new MediatorDemo();
   }

}

</source>

bg:Посредник (шаблон) cs:Prostředník (návrhový vzor) de:Vermittler (Entwurfsmuster) en:Mediator pattern es:Mediator (patrón de diseño) fr:Médiateur (patron de conception) it:Mediator pattern ja:Mediator パターン pl:Mediator (wzorzec projektowy) uk:Посередник (шаблон проектування)

Если вам нравится SbUP.com Сайт, вы можете поддержать его - BTC: bc1qppjcl3c2cyjazy6lepmrv3fh6ke9mxs7zpfky0 , TRC20 и ещё....

→