中介者模式

本文概述

  • 好处
  • 用法
  • 用于介体模式的UML
  • 中介者模式的实现
中介者模式说“定义一个封装一组对象如何交互的对象”。
我将通过考虑问题来解释中介者模式。当我们开始开发时, 我们有几个类, 并且这些类相互交互以产生结果。现在, 慢慢来考虑, 当功能增加时, 逻辑变得更加复杂。那会怎样我们添加了更多的类, 它们仍然彼此交互, 但是现在很难维护此代码。因此, 介体模式可解决此问题。
中介器模式用于降低多个对象或类之间的通信复杂性。这种模式提供了一个调解器类, 该类通常处理不同类之间的所有通信, 并通过松散耦合支持代码的易于维护。
好处
  • 它使类的数量解耦。
  • 它简化了对象协议。
  • 它集中控制。
  • 各个组件变得更简单并且更容易处理, 因为它们不需要彼此传递消息。
  • The components don’ t need to contain logic to deal with their intercommunication and therefore, they are more generic.
用法
  • 它通常在基于消息的系统中使用, 例如聊天应用程序。
  • 当一组对象以复杂但定义明确的方式进行通信时。
用于介体模式的UML
中介者模式

文章图片
参加者:
  • ApnaChatroom:-定义用于与参与者进行交互的界面。
  • ApnaChatroomImpl:-实现由Chatroom接口定义的操作。这些操作正在管理对象之间的交互:当一个参与者发送消息时, 该消息将发送给其他参与者。
  • 参与者:-为参与聊天的用户定义一个界面。
  • User1, User2, … UserN:-实现参与者接口;参与者可以是参与聊天的许多用户。但是每个参与者只会保留对ApnaChatRoom的引用。
中介者模式的实现 步骤1:
创建一个ApnaChatRoom接口。
//This is an interface.public interface ApnaChatRoom { public void showMsg(String msg, Participant p); }// End of the ApnaChatRoom interface.

第2步:
创建一个ApnaChatRoomIml类, 该类将实现ApnaChatRoom接口, 还将使用通过Participant接口进行聊天的参与者人数。
//This is a class.import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; public class ApnaChatRoomImpl implements ApnaChatRoom{ //get current date time DateFormat dateFormat = new SimpleDateFormat("E dd-MM-yyyy hh:mm a"); Date date = new Date(); @Override public void showMsg(String msg, Participant p) {System.out.println(p.getName()+"'gets message: "+msg); System.out.println("\t\t\t\t"+"["+dateFormat.format(date).toString()+"]"); } }// End of the ApnaChatRoomImpl class.

第三步:
创建一个参与者抽象类。
//This is an abstract class.public abstract class Participant {public abstract void sendMsg(String msg); public abstract void setname(String name); public abstract String getName(); }// End of the Participant abstract class.

步骤4:
创建一个User1类, 该类将扩展参与者抽象类并将使用ApnaChatRoom接口。
//This is a class.public class User1 extends Participant { private String name; private ApnaChatRoom chat; @Override public void sendMsg(String msg) { chat.showMsg(msg, this); } @Override public void setname(String name) {this.name=name; } @Override public String getName() {return name; } public User1(ApnaChatRoom chat){this.chat=chat; } }// End of the User1 class.

步骤5:
创建一个User2类, 该类将扩展参与者抽象类并使用ApnaChatRoom接口。
//This is a class.public class User2 extends Participant { private String name; private ApnaChatRoom chat; @Override public void sendMsg(String msg) { this.chat.showMsg(msg, this); } @Override public void setname(String name) {this.name=name; } @Override public String getName() {return name; } public User2(ApnaChatRoom chat){this.chat=chat; } }// End of the User2 class.

步骤6:
创建一个MediatorPatternDemo类, 该类将使用参与聊天的参与者。
//This is a class.public class MediatorPatternDemo { public static void main(String args[]) {ApnaChatRoom chat = new ApnaChatRoomImpl(); User1 u1=new User1(chat); u1.setname("Ashwani Rajput"); u1.sendMsg("Hi Ashwani! how are you?"); User2 u2=new User2(chat); u2.setname("Soono Jaiswal"); u2.sendMsg("I am Fine ! You tell?"); }}// End of the MediatorPatternDemo class.

【中介者模式】输出:
中介者模式

文章图片

    推荐阅读