郑州营销型网站推广工具,电话销售做网站犯法吗,安全联盟可信网站认证,做刀网站java 设计模式 示例中介者模式是行为设计模式之一 #xff0c;因此它处理对象的行为。 中介器设计模式用于在系统中不同对象之间提供集中式通信介质。 根据GoF#xff0c;中介者模式意图是#xff1a; 通过封装不同对象集相互交互和通信的方式#xff0c;允许松散耦合。 允… java 设计模式 示例 中介者模式是行为设计模式之一 因此它处理对象的行为。 中介器设计模式用于在系统中不同对象之间提供集中式通信介质。 根据GoF中介者模式意图是 通过封装不同对象集相互交互和通信的方式允许松散耦合。 允许每个对象集的动作彼此独立地变化。 Mediator设计模式在企业应用程序中非常有用在该应用程序中多个对象相互交互。 如果对象直接相互交互则系统组件彼此紧密耦合这使可维护性成本更高并且难以灵活扩展。 调解器模式致力于在对象之间提供调解器以进行通信并帮助实现对象之间的损耗耦合。 空中交通管制员是调解员模式的一个很好的例子其中机场控制室充当不同航班之间通信的调解员。 中介器充当对象之间的路由器并且可以具有自己的逻辑来提供通信方式。 相互通信的系统对象称为同事。 通常我们有一个提供通信契约的接口或抽象类 然后我们有介体的具体实现。 对于我们的示例我们将尝试实现一个聊天应用程序用户可以在其中进行群聊。 每个用户都将通过其名称进行标识他们可以发送和接收消息。 该组中的所有其他用户都应接收任何用户发送的消息。 介体介面 首先我们将创建Mediator接口该接口将为具体的调解人定义合同。 package com.journaldev.design.mediator;public interface ChatMediator {public void sendMessage(String msg, User user);void addUser(User user);
}同事界面 用户可以发送和接收消息因此我们可以具有用户界面或抽象类。 我创建用户作为抽象类如下所示。 package com.journaldev.design.mediator;public abstract class User {protected ChatMediator mediator;protected String name;public User(ChatMediator med, String name){this.mediatormed;this.namename;}public abstract void send(String msg);public abstract void receive(String msg);
} 请注意用户具有对中介对象的引用这是不同用户之间进行通信所必需的。 混凝土调解员 现在我们将创建具体的调解器类它将在组中具有用户列表并为用户之间的通信提供逻辑。 package com.journaldev.design.mediator;import java.util.ArrayList;
import java.util.List;public class ChatMediatorImpl implements ChatMediator {private ListUser users;public ChatMediatorImpl(){this.usersnew ArrayList();}Overridepublic void addUser(User user){this.users.add(user);}Overridepublic void sendMessage(String msg, User user) {for(User u : this.users){//message should not be received by the user sending itif(u ! user){u.receive(msg);}}}}具体同事 现在我们可以创建供客户端系统使用的具体User类。 package com.journaldev.design.mediator;public class UserImpl extends User {public UserImpl(ChatMediator med, String name) {super(med, name);}Overridepublic void send(String msg){System.out.println(this.name: Sending Messagemsg);mediator.sendMessage(msg, this);}Overridepublic void receive(String msg) {System.out.println(this.name: Received Message:msg);}} 请注意send方法正在使用中介程序将消息发送给用户并且不知道中介程序将如何处理该消息。 中介者模式客户端 让我们用一个简单的程序来测试我们的聊天应用程序在该程序中我们将创建调解器并将用户添加到组中并且其中一个用户将发送一条消息。 package com.journaldev.design.mediator;public class ChatClient {public static void main(String[] args) {ChatMediator mediator new ChatMediatorImpl();User user1 new UserImpl(mediator, Pankaj);User user2 new UserImpl(mediator, Lisa);User user3 new UserImpl(mediator, Saurabh);User user4 new UserImpl(mediator, David);mediator.addUser(user1);mediator.addUser(user2);mediator.addUser(user3);mediator.addUser(user4);user1.send(Hi All);}} 请注意客户端程序非常简单并且不知道如何处理消息以及中介程序是否正在获得用户。 上面程序的输出是 Pankaj: Sending MessageHi All
Lisa: Received Message:Hi All
Saurabh: Received Message:Hi All
David: Received Message:Hi All中介者模式类图 JDK中的中介者模式 java.util.Timer类scheduleXXX方法 Java并发执行程序 execute方法。 java.lang.reflect.Method invoke方法。 重要事项 当对象之间的通信逻辑很复杂时调解器模式非常有用我们可以拥有一个负责通信逻辑的中心通信点。 Java消息服务JMS使用Mediator模式和Observer模式来允许应用程序向其他应用程序订阅和发布数据。 我们不应该仅仅使用调解器模式来实现损失耦合因为如果调解器的数量增加那么将很难维持它们。 参考 Java中的介体设计模式– JCG合作伙伴 Pankaj Kumar在开发人员食谱博客上的示例教程 。 翻译自: https://www.javacodegeeks.com/2013/08/mediator-design-pattern-in-java-example-tutorial.htmljava 设计模式 示例