重庆网站运营公司,唐山市城市建设档案馆网站,哪些网站容易收录,保险网站建设公司中介者模式#xff08;Mediator Pattern#xff09;是一种行为型设计模式#xff0c;其主要作用是通过一个中介对象来封装一系列对象的交互#xff0c;从而降低它们之间的耦合度#xff0c;提高系统的可维护性和可扩展性。
中介者模式的主要特点
封装交互#xff1a;用…中介者模式Mediator Pattern是一种行为型设计模式其主要作用是通过一个中介对象来封装一系列对象的交互从而降低它们之间的耦合度提高系统的可维护性和可扩展性。
中介者模式的主要特点
封装交互用一个中介对象来封装一系列对象的交互这些对象不再直接相互引用而是通过中介者进行交互。降低耦合由于对象之间的交互被封装在中介者对象中因此它们之间的耦合度降低对象可以更加独立地变化和复用。集中控制多个对象之间的交互被封装在中介者对象中集中管理当交互行为发生变化时只需要修改中介者对象即可而不需要修改各个对象。一对多关联通过引入中介者对象将原本多个对象之间复杂的多对多关联关系转变为对象与中介者之间的一对多关联关系简化了系统的结构。
中介者模式的角色
中介者Mediator定义了一个接口用于与各同事对象进行通信。同事对象Colleague实现了一个接口该接口用于与中介者进行通信。同事对象之间不再直接相互引用而是通过中介者进行交互。
中介者模式的优缺点
优点
降低了对象之间的耦合度使得对象更加独立易于复用和维护。将对象间复杂的多对多关联关系转变为简单的一对多关联关系提高了系统的灵活性和可扩展性。集中控制交互行为使得修改和维护更加容易。
缺点
当同事对象数量较多时中介者对象可能会变得臃肿和复杂难以维护。如果中介者对象出现故障可能会导致整个系统崩溃。
适用场景
当系统中对象之间存在复杂的引用关系导致系统结构混乱且难以理解时。当需要创建一个运行于多个类之间的对象但又不想生成新的子类时。当需要改变系统的交互方式但又不希望修改现有的对象时。
示例
我们可以考虑一个简单的聊天室示例其中用户同事对象通过聊天室中介者进行通信。以下是这个示例的Java代码
// 同事接口
interface Colleague {void sendMessage(String message);void receiveMessage(String message);void setMediator(Mediator mediator);
}// 用户类实现同事接口
class User implements Colleague {private Mediator mediator;private String name;public User(String name) {this.name name;}Overridepublic void sendMessage(String message) {mediator.sendMessage(this, message);}Overridepublic void receiveMessage(String message) {System.out.println(name received: message);}Overridepublic void setMediator(Mediator mediator) {this.mediator mediator;}
}// 中介者接口
interface Mediator {void register(Colleague colleague);void sendMessage(Colleague sender, String message);
}// 聊天室类实现中介者接口
class ChatRoom implements Mediator {private ListColleague colleagues new ArrayList();Overridepublic void register(Colleague colleague) {colleagues.add(colleague);colleague.setMediator(this);}Overridepublic void sendMessage(Colleague sender, String message) {for (Colleague colleague : colleagues) {if (!colleague.equals(sender)) {colleague.receiveMessage(sender.name : message);}}}
}// 客户端代码
public class Client {public static void main(String[] args) {ChatRoom chatRoom new ChatRoom();User user1 new User(Alice);User user2 new User(Bob);chatRoom.register(user1);chatRoom.register(user2);user1.sendMessage(Hello, Bob! How are you?);}
}在这个示例中我们定义了一个Colleague接口它包含了发送和接收消息的方法以及设置中介者的方法。User类实现了这个接口并包含了用户的名字。Mediator接口定义了注册同事和发送消息的方法。ChatRoom类实现了这个接口并管理了一个同事对象的列表。在ChatRoom的sendMessage方法中它遍历了所有的同事对象并将消息发送给除了发送者之外的所有其他同事。
在Client类中我们创建了一个ChatRoom对象和两个User对象并将它们注册到聊天室中。然后我们让Alice向Bob发送一条消息。当这条消息被发送时聊天室会将它转发给所有其他的用户在这个例子中只有Bob并打印出接收到的消息。