Рубрики
Без рубрики

Шаблон проектирования посредника в Java

Шаблон Посредника. Шаблон проектирования посредника в примере учебника по Java. Диаграмма Классов Посредника, Интерфейс Коллеги Посредника, Пример Исходного Кода Клиентской Программы

Автор оригинала: Pankaj Kumar.

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

Шаблон Дизайна Посредника

Согласно GoF, намерение посредника-это:

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

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

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

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

Интерфейс шаблона посредника

Прежде всего, мы создадим интерфейс посредника, который определит контракт для конкретных посредников.

Прежде всего, мы создадим интерфейс посредника, который определит контракт для конкретных посредников.

package com.journaldev.design.mediator;

public interface ChatMediator {

	public void sendMessage(String msg, User user);

	void addUser(User user);
}

Интерфейс Коллег по шаблону посредника

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

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

package com.journaldev.design.mediator;

public abstract class User {
	protected ChatMediator mediator;
	protected String name;
	
	public User(ChatMediator med, String name){
		this.mediator=med;
		this.name=name;
	}
	
	public abstract void send(String msg);
	
	public abstract void receive(String msg);
}

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

Конкретный Посредник

Теперь мы создадим класс concretemediator, в нем будет список пользователей в группе и логика взаимодействия между пользователями.

Теперь мы создадим класс concretemediator, в нем будет список пользователей в группе и логика взаимодействия между пользователями.

package com.journaldev.design.mediator;

import java.util.ArrayList;
import java.util.List;

public class ChatMediatorImpl implements ChatMediator {

	private List users;
	
	public ChatMediatorImpl(){
		this.users=new ArrayList<>();
	}
	
	@Override
	public void addUser(User user){
		this.users.add(user);
	}
	
	@Override
	public void sendMessage(String msg, User user) {
		for(User u : this.users){
			//message should not be received by the user sending it
			if(u != user){
				u.receive(msg);
			}
		}
	}

}

Образец Дизайна Посредника Конкретный Коллега

Теперь мы можем создавать конкретные классы пользователей, которые будут использоваться клиентской системой.

Теперь мы можем создавать конкретные классы пользователей, которые будут использоваться клиентской системой.

package com.journaldev.design.mediator;

public class UserImpl extends User {

	public UserImpl(ChatMediator med, String name) {
		super(med, name);
	}

	@Override
	public void send(String msg){
		System.out.println(this.name+": Sending Message="+msg);
		mediator.sendMessage(msg, this);
	}
	@Override
	public void receive(String msg) {
		System.out.println(this.name+": Received Message:"+msg);
	}

}

Обратите внимание, что метод send() использует посредника для отправки сообщения пользователям, и он понятия не имеет, как оно будет обработано посредником.

Пример Шаблона посредника Код Клиентской программы

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

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

package com.journaldev.design.mediator;

public class ChatClient {

	public static void main(String[] args) {
		ChatMediator mediator = new ChatMediatorImpl();
		User user1 = new UserImpl(mediator, "Pankaj");
		User user2 = new UserImpl(mediator, "Lisa");
		User user3 = new UserImpl(mediator, "Saurabh");
		User user4 = new UserImpl(mediator, "David");
		mediator.addUser(user1);
		mediator.addUser(user2);
		mediator.addUser(user3);
		mediator.addUser(user4);
		
		user1.send("Hi All");
		
	}

}

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

Вывод программы примера шаблона посредника является:

Pankaj: Sending Message=Hi All
Lisa: Received Message:Hi All
Saurabh: Received Message:Hi All
David: Received Message:Hi All

Диаграмма Классов Шаблона посредника

Пример шаблона посредника в JDK

  • java.util.Таймер методы расписания занятий XXX()
  • Исполнитель параллелизма Java Метод execute ().
  • java.lang.размышляйте.Метод invoke() метод.

Шаблон Дизайна Посредника Важные Моменты

  • Шаблон посредника полезен, когда логика связи между объектами сложна, у нас может быть центральная точка связи, которая заботится о логике связи.
  • Служба сообщений Java (JMS) использует шаблон посредника вместе с шаблоном наблюдателя , чтобы позволить приложениям подписываться и публиковать данные для других приложений.
  • Мы не должны использовать шаблон посредника только для достижения слабой связи, потому что если количество посредников будет расти, то их будет трудно поддерживать.

Это все для шаблона проектирования посредника и его реализации на java.