本文概述
- 好处
- 用法
- 用于介体模式的UML
- 中介者模式的实现
我将通过考虑问题来解释中介者模式。当我们开始开发时, 我们有几个类, 并且这些类相互交互以产生结果。现在, 慢慢来考虑, 当功能增加时, 逻辑变得更加复杂。那会怎样我们添加了更多的类, 它们仍然彼此交互, 但是现在很难维护此代码。因此, 介体模式可解决此问题。
中介器模式用于降低多个对象或类之间的通信复杂性。这种模式提供了一个调解器类, 该类通常处理不同类之间的所有通信, 并通过松散耦合支持代码的易于维护。
好处
- 它使类的数量解耦。
- 它简化了对象协议。
- 它集中控制。
- 各个组件变得更简单并且更容易处理, 因为它们不需要彼此传递消息。 The components don’ t need to contain logic to deal with their intercommunication and therefore, they are more generic.
- 它通常在基于消息的系统中使用, 例如聊天应用程序。
- 当一组对象以复杂但定义明确的方式进行通信时。
文章图片
参加者:
- ApnaChatroom:-定义用于与参与者进行交互的界面。
- ApnaChatroomImpl:-实现由Chatroom接口定义的操作。这些操作正在管理对象之间的交互:当一个参与者发送消息时, 该消息将发送给其他参与者。
- 参与者:-为参与聊天的用户定义一个界面。
- User1, User2, … UserN:-实现参与者接口;参与者可以是参与聊天的许多用户。但是每个参与者只会保留对ApnaChatRoom的引用。
创建一个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.
【中介者模式】输出:
文章图片