This article describes the implementation of multi-person chat room functions based on the intermediary mode. Share it for your reference, as follows:
A pattern definition
The mediator pattern uses a mediator object to encapsulate the interaction between a series of objects, so that other object instances need not be displayed in each object, thereby reducing the coupling degree between each object and changing the interaction relationship between objects independently.
Examples of the second mode
1 Pattern Analysis
We borrow multi-person chat rooms to illustrate this pattern
2 Mediation mode static class diagram
3 Code Examples
3.1 Intermediary Interface - IMediator
package com.demo.mediator;import com.demo.colleague.IUser;/** * Intermediary interface* * @author * */public interface IMediator { /** * Registered user information* * @param user */ public void registration(IUser user); /** * Send message to everyone* * @param user * Send message*/ public void notifyAllMessage(IUser user);}3.2 Intermediary implementation - ConcreteMediator
package com.demo.mediator;import java.util.ArrayList;import java.util.Iterator;import java.util.List;import com.demo.colleague.IUser;/** * Intermediary implementation class* * @author * */public class ConcreteMediator implements IMediator { private final List<IUser> list = new ArrayList<IUser>(); /** * Registered user information* * @param user */ public void regist(IUser user) { if (user != null && !list.contains(user)) { list.add(user); } } /** * Send message* * @param user * Send message*/ public void notifyAllMessage(IUser user) { Iterator<IUser> iterator = list.iterator(); IUser tmpUser = null; while (iterator.hasNext()) { tmpUser = iterator.next(); if (tmpUser != null && !tmpUser.equals(user)) { // Exclude message sender tmpUser.receiveMessage(user.getMessage()); } } }}3.3 User Interface - IUser
package com.demo.colleague;/** * User interface* * @author * */public interface IUser{ /** * Receive message* * @param message * Message*/ public void receiveMessage(String message); /** * Send message* * @param message * Message*/ public void sendMessage(String message); /** * Get the message content sent* * @return */ public String getMessage();}3.4 AbstractUser - AbstractUser
package com.demo.colleague;import com.demo.mediator.IMedator;/** * Abstract user information* * @author * */public abstract class AbstractUser implements IUser{ // Intermediary protected IMediator mediator; // Name protected String name; // Message protected String message; public AbstractUser(IMedator mediator, String name) { this.mediator = mediator; this.name = name; } /** * Send a message* * @param message * Message*/ public void sendMessage(String message) { this.message = message; System.out.println(this.name + " Say:" + this.message); mediator.notifyAllMessage(this); } public String getMessage() { return message; }}3.5 User A - UserA
package com.demo.colleague;import com.demo.mediator.IMediator;/** * User A * * @author * */public class UserA extends AbstractUser { public UserA(IMediator mediator, String name) { super(mediator, name); // Register in the mediator.regist(this); } /** * Receive message method*/ public void receiveMessage(String message) { System.out.println("User A Received Message : " + message); }}3.6 User B - UserB
package com.demo.colleague;import com.demo.mediator.IMediator;/** * User B * * @author * */public class UserB extends AbstractUser { public UserB(IMediator mediator, String name) { super(mediator, name); // Register in the mediator object mediator.regist(this); } /** * Receive message method*/ public void receiveMessage(String message) { System.out.println("User B Received Message : " + message); }}3.7 User C - UserC
package com.demo.colleague;import com.demo.mediator.IMediator;/** * User C * * @author * */public class UserC extends AbstractUser { public UserC(IMediator mediator, String name) { super(mediator, name); // Register in the mediator object mediator.regist(this); } /** * Receive message method*/ public void receiveMessage(String message) { System.out.println("User C Received Message : " + message); }}3.8 Running a multiplayer chat room
package com.demo;import com.demo.colleague.IUser;import com.demo.colleague.UserA;import com.demo.colleague.UserB;import com.demo.colleague.UserC;import com.demo.mediator.ConcreteMediator;import com.demo.mediator.IMediator;/** * * Main application* * @author * */public class Client { /** * @param args */ public static void main(String[] args) { // Create a chat room (mediator) IMediator mediator = new ConcreteMediator(); // Create user information IUser userA = new UserA(mediator, "Zhang San"); IUser userB = new UserB(mediator, "Li Si"); IUser userC = new UserC(mediator, "Wang Wu"); System.out .println("============================================================================================================================================================================================================================================================================================================================================================================================================================================ .println("======================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================== .println("======================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================== .println("================================================================================/n"); }}4 Running results
===================================================================================
Zhang San said: Hello everyone, my name is Zhang San! I am new to you, please take care of me!
User B Received Message: Hello everyone, my name is Zhang San! I am new to you, please take care of me!
User C Received Message: Hello everyone, my name is Zhang San! I am new to you, please take care of me!
===================================================================================
===================================================================================
Li Si said: Hello, my name is Li Si, welcome to join!
User A Received Message: Hello, my name is Li Si, welcome to join!
User C Received Message: Hello, my name is Li Si, welcome to join!
===================================================================================
===================================================================================
Wang Wu said: I am Wang Wu, welcome!
User A Received Message: I am Wang Wu, welcome!
User B Received Message: I am Wang Wu, welcome!
===================================================================================
Three principles of design of this pattern
1 One-to-many object dependencies are converted into one-to-one dependencies
2 Centralized control improves the reusability of the class
Four usage occasions
(1) A group of objects communicates in a well-defined but complex way, resulting in a confusing and difficult to understand interdependence structure. Pay attention to the interdependence between multiple objects.
(2) Want to customize a behavior distributed in multiple classes, but don’t want to generate too many subclasses.
(3) The research and development of product architecture requires more opportunities to expand.
Five intermediary mode static class diagram
For more Java-related content, readers who are interested in this site can view the topics: "Introduction and Advanced Tutorial on Java Object-Oriented Programming", "Tutorial on Java Data Structure and Algorithm", "Summary of Java Operation DOM Node Skills", "Summary of Java File and Directory Operation Skills" and "Summary of Java Cache Operation Skills"
I hope this article will be helpful to everyone's Java programming.