行为设计模式 - 中介设计模式

 

行为设计模式 - 中介设计模式

 

中介设计模式是行为设计​​模式之一,因此它处理对象的行为。介体设计模式用于在系统中的不同对象之间提供集中式通信介质。

 

 

目录[ 隐藏 ]

中介设计模式

中介模式,中介设计模式,中介模式java

根据GoF,调解员模式意图是:

通过封装不同的对象集互动和相互通信的方式,允许松散耦合。允许每个对象集的操作彼此独立地变化。

介体设计模式在多个对象相互交互的企业应用程序中非常有用。如果对象直接相互交互,则系统组件彼此紧密耦合,这使得可维护性成本更高并且不难扩展。Mediator模式侧重于在对象之间提供中介以进行通信,并帮助实现对象之间的失败耦合。

空中交通管制员是调解员模式的一个很好的例子,其中机场控制室作为不同航班之间通信的调解员。Mediator作为对象之间的路由器,它可以拥有自己的逻辑来提供通信方式。

相互通信的系统对象称为同事。通常我们有一个接口或抽象类提供通信合同,然后我们有调解器的具体实现。

对于我们的示例,我们将尝试实现一个聊天应用程序,用户可以在其中进行群聊。每个用户都将通过其名称进行标识,并且可以发送和接收消息。任何用户发送的消息都应该由该组中的所有其他用户接收。

中介模式界面

首先,我们将创建Mediator接口,定义具体介体的合同。

ChatMediator.java


package com.journaldev.design.mediator;

public interface ChatMediator {

	public void sendMessage(String msg, User user);

	void addUser(User user);
}

中介模式同事界面

用户可以发送和接收消息,因此我们可以拥有用户界面或抽象类。我正在创建User作为抽象类,如下所示。

User.java


package com.journaldev.design.mediator;

public abstract class User {
	protected ChatMediator mediator;
	protected String name;
	
	public User(ChatMediator med, String name){
		this.mediator=med;
		this.name=name;
	}
	
	public abstract void send(String msg);
	
	public abstract void receive(String msg);
}

请注意,User具有对中介对象的引用,这是不同用户之间通信所必需的。

混凝土调解员

现在我们将创建具体的中介类,它将在组中有一个用户列表,并为用户之间的通信提供逻辑。

ChatMediatorImpl.java


package com.journaldev.design.mediator;

import java.util.ArrayList;
import java.util.List;

public class ChatMediatorImpl implements ChatMediator {

	private List<User> users;
	
	public ChatMediatorImpl(){
		this.users=new ArrayList<>();
	}
	
	@Override
	public void addUser(User user){
		this.users.add(user);
	}
	
	@Override
	public void sendMessage(String msg, User user) {
		for(User u : this.users){
			//message should not be received by the user sending it
			if(u != user){
				u.receive(msg);
			}
		}
	}

}

调解员设计模式具体同事

现在我们可以创建客户端系统使用的具体User类。

UserImpl.java


package com.journaldev.design.mediator;

public class UserImpl extends User {

	public UserImpl(ChatMediator med, String name) {
		super(med, name);
	}

	@Override
	public void send(String msg){
		System.out.println(this.name+": Sending Message="+msg);
		mediator.sendMessage(msg, this);
	}
	@Override
	public void receive(String msg) {
		System.out.println(this.name+": Received Message:"+msg);
	}

}

请注意,send()方法正在使用mediator将消息发送给用户,并且不知道调解器将如何处理它。

中介模式示例客户端程序代码

让我们用一个简单的程序测试我们的聊天应用程序,我们将创建中介并将用户添加到组中,其中一个用户将发送消息。

ChatClient.java


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 Message=Hi All
Lisa: Received Message:Hi All
Saurabh: Received Message:Hi All
David: Received Message:Hi All

中介模式类图

中介模式类图,中介设计模式java

JDK中的中介模式示例

中介设计模式重点

  • 当对象之间的通信逻辑复杂时,中介模式很有用,我们可以拥有一个负责通信逻辑的中心通信点。
  • Java消息服务(JMS)使用Mediator模式和Observer模式,允许应用程序订阅数据并将数据发布到其他应用程序。
  • 我们不应该仅使用中介模式来实现失败耦合,因为如果调解器的数量增加,那么将很难维持它们。

这就是mediator设计模式以及它在java中的实现。

 

转载来源:https://www.journaldev.com/1730/mediator-design-pattern-java

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值