女友的对话(中介者模式也叫调停者)

本文介绍了一种使用中介者模式进行对象间通信的设计方法。通过一个具体的例子展示了如何创建中介者对象来封装一系列对象间的交互,使得各个对象之间不需要直接相互引用,从而降低耦合度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

 

需要中介者对象作为通信控制平台 所操控的抽象对象

 

package mediator;

public abstract class DreamGirl {
	//通知者的一个引用
	protected Mediator mediator;
	
	protected String name;
	
	//中介者调用的方法,用来将别人发的消息通知给自己
	public abstract void notifyMessage(String message);
	
	//通过对方姓名发送信息
    public void Send(String message,String to_name) {
		//委托给中介者,并将自己作为参数传给中介者
		this.mediator.send(message,  this,   to_name);

	}
	public Mediator getMediator() {
		return mediator;
	}

	public void setMediator(Mediator mediator) {
		this.mediator = mediator;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
	
	

}

 

 

具体对象的实现

 

public class BeautifulGirl extends DreamGirl {
	public void notifyMessage(String message) {
	 
		System.out.println("BeautifulGirl 得到消息:"+ message);
	}

}




public class LivelyGirl extends DreamGirl {

	public void notifyMessage(String message) {
	 
		System.out.println("LivelyGirl 得到消息:"+ message);
	}

}

 

 

 

中介者对象接口

package mediator;

 
//中介者 
public interface   Mediator {
	
	public abstract void send(String message,DreamGirl girl,String to_name);

}

 

通信控制所需的具体中介者实现

 

package mediator;

import java.util.*;
import java.util.Map.Entry;


/**
 * 用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示地相互引用,
 * 从而使其耦合松散,而且可以独立的改变它们之间的交互。
 * 
 * @author Administrator
 *
 */
public class Boy implements Mediator {

	/*private BeautifulGirl beautifulGirl;
	private LivelyGirl    livelyGirl;*/
	
	
	private Map<String,DreamGirl> maps =null;
	
	Boy(){
		
		maps= new HashMap<String,DreamGirl>();
	}
	
	public void put(String name,DreamGirl dg){
		
		maps.put(name, dg);
		
	}
    public void put( DreamGirl dg){
		
		maps.put(dg.getName(), dg);
		
	}
	
	@SuppressWarnings("unchecked")
	public void send(String message, DreamGirl girl,String to_name) {
		//这边根据发送姓名再通过循环girl寻找指定的对象,再通过对象的notifyMessage方法通知信息
		Iterator iter  = maps.entrySet().iterator();
		
		 while( iter.hasNext() ){
			 
			 Map.Entry<String, DreamGirl> entrys= (Entry<String, DreamGirl>) iter.next();
			 
			 if(entrys.getKey().endsWith(girl.getName())){
				 
				 DreamGirl res = entrys.getValue();
				 res.notifyMessage(message);
			 }
			 
		 }
		 
		/*if(girl.equals(beautifulGirl)){
			 
			livelyGirl.notifyMessage(message);
			
		}else if(girl.equals(livelyGirl)){
			
			beautifulGirl.notifyMessage(message);
		}
		*/
	}

	
/*	public BeautifulGirl getBeautifulGirl() {
		return beautifulGirl;
	}

	public void setBeautifulGirl(BeautifulGirl beautifulGirl) {
		this.beautifulGirl = beautifulGirl;
	}

	public LivelyGirl getLivelyGirl() {
		return livelyGirl;
	}

	public void setLivelyGirl(LivelyGirl livelyGirl) {
		this.livelyGirl = livelyGirl;
	}
	*/
	

	
	public static void main(String[]args){
		Boy ysen =new Boy();
		BeautifulGirl bg = new BeautifulGirl();
		LivelyGirl lg= new LivelyGirl();
		bg.setName("wang_fei");
		lg.setName("zhou_xun");
		
		//让中介者认识这些girl
		ysen.put(bg);
		ysen.put(lg);
		
		//让girl 认识这个中介者
		bg.setMediator(ysen);
		lg.setMediator(ysen);
		
		
		bg.Send("看见我老公了没啊,长的很帅的那种!","wang_fei" );
		lg.Send("靠!不要脸的越来越多了!","zhou_xun");
		
	/*	Boy ysen =new Boy();
		BeautifulGirl bg = new BeautifulGirl();
		LivelyGirl lg= new LivelyGirl();
		
		//让girl 认识这个中介者
		bg.setMediator(ysen);
		lg.setMediator(ysen);
		
		//让中介者认识这些girl
		ysen.setBeautifulGirl(bg);
		ysen.setLivelyGirl(lg);
		
		
		
		bg.Send("看见我老公了没啊,长的很帅的那种!");
		lg.Send("靠!不要脸的越来越多了!");
		*/
		
	}
}

 

BeautifulGirl 得到消息:看见我老公了没啊,长的很帅的那种!
LivelyGirl 得到消息:靠!不要脸的越来越多了!

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值