个性化阅读
专注于IT技术分析

中介者模式

本文概述

中介者模式说“定义一个封装一组对象如何交互的对象”。

我将通过考虑问题来解释中介者模式。当我们开始开发时, 我们有几个类, 并且这些类相互交互以产生结果。现在, 慢慢来考虑, 当功能增加时, 逻辑变得更加复杂。那会怎样我们添加了更多的类, 它们仍然彼此交互, 但是现在很难维护此代码。因此, 介体模式可解决此问题。

中介器模式用于降低多个对象或类之间的通信复杂性。这种模式提供了一个调解器类, 该类通常处理不同类之间的所有通信, 并通过松散耦合支持代码的易于维护。


好处

  • 它使类的数量解耦。
  • 它简化了对象协议。
  • 它集中控制。
  • 各个组件变得更简单并且更容易处理, 因为它们不需要彼此传递消息。
  • 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.

输出:

中介者模式
赞(0)
未经允许不得转载:srcmini » 中介者模式

评论 抢沙发

评论前必须登录!