本文概述
中介者模式说“定义一个封装一组对象如何交互的对象”。
我将通过考虑问题来解释中介者模式。当我们开始开发时, 我们有几个类, 并且这些类相互交互以产生结果。现在, 慢慢来考虑, 当功能增加时, 逻辑变得更加复杂。那会怎样我们添加了更多的类, 它们仍然彼此交互, 但是现在很难维护此代码。因此, 介体模式可解决此问题。
中介器模式用于降低多个对象或类之间的通信复杂性。这种模式提供了一个调解器类, 该类通常处理不同类之间的所有通信, 并通过松散耦合支持代码的易于维护。
好处
- 它使类的数量解耦。
- 它简化了对象协议。
- 它集中控制。
- 各个组件变得更简单并且更容易处理, 因为它们不需要彼此传递消息。 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.
输出:
评论前必须登录!
注册