Este artículo describe la implementación de funciones de la sala de chat de varias personas basadas en el modo intermediario. Compártelo para su referencia, como sigue:
Una definición de patrón
El patrón mediador utiliza un objeto mediador para encapsular la interacción entre una serie de objetos, de modo que no necesitan mostrar otras instancias de objetos en cada objeto, reduciendo así el grado de acoplamiento entre cada objeto y cambiando la relación de interacción entre los objetos de forma independiente.
Ejemplos del segundo modo
1 análisis de patrones
Tomamos prestados salas de chat de varias personas para ilustrar este patrón
2 Modo de mediación Diagrama de clase estática
3 ejemplos de código
3.1 Interfaz intermediaria - Imediador
paquete com.demo.mediator; import com.demo.colleague.iuser;/** * Interface intermediaria * * @author * */interfaz pública imediator {/** * Información de usuario registrada * * @param user */registro público void (usuario iUser); / *** Enviar mensaje a todos*** @param user* Enviar mensaje*/ public void notifyAlsMessage (user iuser);}3.2 Implementación intermedia - Concretemedator
paquete com.demo.mediator; import java.util.arrayList; import java.util.iterator; import java.util.list; import com.demo.colleague.iuser;/** * Intermediary Implementation Clase * * @author * */public Class Concretemediator Implements Imediator {Lista de fines privados <IUSER> LISTA = NEWSET = NEWS ArrayList <Iuser> (); / ** * Información de usuario registrada * * @param user */ public void regist (iuser user) {if (user! = Null &&! List.contains (user)) {list.add (user); }} / *** Enviar mensaje** @param user* Enviar mensaje* / public void notifyAlsMessage (iUser user) {iterator <iuser> iterator = list.iterator (); Iuser tmpuser = nulo; while (iterator.hasnext ()) {tmpuser = iterator.next (); if (tmpuser! = null &&! tmpuser.equals (user)) {// excluir el remitente de mensajes tmpuser.Receivemessage (user.getMessage ()); }}}}3.3 Interfaz de usuario - iuser
paquete com.demo.colleague;/** * interfaz de usuario * * @author * */public interfaz iuser {/** * recibe mensaje * * @param mensaje * mensaje */public void recibeMessage (mensaje de cadena); / *** Enviar mensaje** @param Mensaje* Mensaje*/ public void sendMessage (mensaje de cadena); / ** * Obtenga el contenido del mensaje enviado * * @return */ public string getMessage ();}3.4 AbstractUser - AbstractUser
paquete com.demo.colleague; import com.demo.mediator.imedator;/** * Información del usuario abstracta * * @author * */public abstractus abstractUser implementa iuser {// mediador de imediador protegido intermediario; // Nombre del nombre de la cadena protegida; // Mensaje de cadena protegido de mensaje; Public AbstractUser (IMedator Mediator, Nombre de cadena) {this.Mediator = Mediator; this.name = name; } / *** Enviar un mensaje** @param Mensaje* Mensaje* / public void sendMessage (mensaje de cadena) {this.message = mensaje; System.out.println (this.name + "Say:" + this.message); mediator.notifyAllMessage (esto); } public String getMessage () {Mensaje de retorno; }}3.5 Usuario A - UserA
paquete com.demo.colleague; import com.demo.mediator.imediator;/** * user a * * @author * */public class UserA extiende AbstractUser {public UserA (imediator Mediator, Nombre de cadena) {Super (Mediator, nombre); // registrarse en el mediador.regista (esto); } / *** Método de mensaje de recepción* / public void recibeMessage (mensaje de cadena) {System.out.println ("Usuario un mensaje recibido:" + mensaje); }}3.6 Usuario B - UserB
paquete com.demo.colleague; import com.demo.mediator.imediator;/** * User B * * @author * */public class UserB extiende AbstractUser {public UserB (IMediator Mediator, Nombre de cadena) {Super (Mediator, nombre); // Regístrese en el objeto mediador Mediator.Regist (esto); } / *** Recibir el método de mensaje* / public void Receptemessage (mensaje de cadena) {System.out.println ("Mensaje recibido del usuario B:" + Mensaje); }}3.7 Usuario C - Userc
paquete com.demo.colleague; import com.demo.mediator.imediator;/** * user c * * @author * */public class Userc extiende AbstractUser {public UserC (IMediator Mediator, Nombre de cadena) {Super (Mediator, nombre); // Regístrese en el objeto mediador Mediator.Regist (esto); } / *** Recibir el método de mensaje* / public void ReceptMessage (mensaje de cadena) {System.out.println ("Mensaje recibido del usuario C:" + Mensaje); }}3.8 Ejecutando una sala de chat multijugador
paquete com.demo; import com.demo.colleague.iuser; import com.demo.colleague.usera; import com.demo.colleague.userb; import com.demo.cololeague */public class Client {/** *@param args */public static void main (string [] args) {// crea una sala de chat (mediador) imediator mediator = new Concretemediator (); // crear información del usuario iUser userA = new UserA (mediador, "Zhang San"); Iuser userb = new UserB (mediador, "li si"); IUser UsERC = nuevo Userc (mediador, "Wang Wu"); System.Out .println ("===================================================================================================================================================================================================================================================================================================. ============================================================================================================== ============================================================================================================= ============================================================================================================== .println ("======================================================== ====================================================================== ====================================================================== =================================================================== ====================================================================== ====================================================================== ====================================================================== =================================================================== .println ("======================================================== ====================================================================== ====================================================================== =================================================================== ====================================================================== ====================================================================== ====================================================================== =================================================================== .println ("================================================================================/n");4 Resultados de ejecución
===========================================================================================================================================
Zhang San dijo: Hola a todos, mi nombre es Zhang San! Soy nuevo para ti, ¡por favor cuida de mí!
Mensaje del usuario B recibido: Hola a todos, mi nombre es Zhang San! Soy nuevo para ti, ¡por favor cuida de mí!
Mensaje recibido del usuario C: Hola a todos, mi nombre es Zhang San! Soy nuevo para ti, ¡por favor cuida de mí!
===========================================================================================================================================
===========================================================================================================================================
Li Si dijo: Hola, mi nombre es Li Si, ¡bienvenido para unirse!
Usuario un mensaje recibido: Hola, mi nombre es Li Si, ¡bienvenido a unirse!
Mensaje recibido del usuario C: Hola, mi nombre es Li Si, ¡bienvenido a unirse!
===========================================================================================================================================
===========================================================================================================================================
Wang Wu dijo: ¡Soy Wang Wu, bienvenido!
Usuario un mensaje recibido: ¡Soy Wang Wu, bienvenido!
Mensaje del usuario B recibido: ¡Soy Wang Wu, bienvenido!
===========================================================================================================================================
Tres principios de diseño de este patrón
1 Las dependencias de objetos de uno a muchos se convierten en dependencias uno a uno
2 El control centralizado mejora la reutilización de la clase
Cuatro ocasiones de uso
(1) Un grupo de objetos se comunica de una manera bien definida pero compleja, lo que resulta en una estructura de interdependencia confusa y difícil de entender. Presta atención a la interdependencia entre múltiples objetos.
(2) Desea personalizar un comportamiento distribuido en múltiples clases, pero no quiere generar demasiadas subclases.
(3) La investigación y el desarrollo de la arquitectura del producto requieren más oportunidades para expandirse.
Cinco diagrama de clase estática en modo intermediario
Para obtener más contenido relacionado con Java, los lectores interesados en este sitio pueden ver los temas: "Introducción y tutorial avanzado sobre la programación orientada a objetos de Java", "Tutorial sobre la estructura de datos de Java y el algoritmo", "Resumen de la operación de Java DOM Node Node", "Summary of Java File and Directory Operation Skilly" y "Summary of Java Cache Skitch" Habilidades "
Espero que este artículo sea útil para la programación Java de todos.