`
ysen
  • 浏览: 122185 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

 
阅读更多

 

 

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

 

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 得到消息:靠!不要脸的越来越多了!

 

 

 

 

分享到:
评论
4 楼 zhoyan 2010-11-26  
不错,不错
3 楼 xiaojing3517 2010-01-06  
superhanliu 写道
楼上和楼主的图片,都是被美女包围。

生逢其时  哈哈哈哈
2 楼 superhanliu 2010-01-06  
楼上和楼主的图片,都是被美女包围。
1 楼 fanbo276 2010-01-05  
更正楼主代码的错误:
Boy类的
public void send(String message, DreamGirl girl,String to_name) {  
40.        //这边根据发送姓名再通过循环girl寻找指定的对象,再通过对象的notifyMessage方法通知信息  
41.        Iterator iter  = maps.entrySet().iterator();  
42.          
43.         while( iter.hasNext() ){  
44.               
45.             Map.Entry<String, DreamGirl> entrys= (Entry<String, DreamGirl>) iter.next();  
46.               
47.             if(entrys.getKey().endsWith(to_name)){  
48.                   
49.                 DreamGirl res = entrys.getValue();  
50.                 res.notifyMessage(message);  
51.             }  
52.               
53.         }  
另外还有一个逻辑错误:
102.        bg.Send("看见我老公了没啊,长的很帅的那种!","wang_fei" );  
103.        lg.Send("靠!不要脸的越来越多了!","zhou_xun");  
这两行都是自己跟自己说话,应该把名字对换一下

相关推荐

    调停者模式

    然而,值得注意的是,调停者模式也可能引入额外的复杂性,特别是在调停者本身变得过于庞大和复杂时,可能会成为新的系统瓶颈。因此,在实际应用中,应根据具体情况权衡是否采用调停者模式,以及如何设计合理的调停者...

    c++设计模式-行为型模式-中介者模式

    c++设计模式-行为型模式-中介者模式;qt工程;c++简单源码; 中介者(Mediator)模式的定义:定义一个中介对象来封装一系列对象之间的交互,使原有对象之间的...中介者模式又叫调停模式,它是迪米特法则的典型应用。

    高级调停者性格档案.ZIP

    "高级调停者性格档案.ZIP" 是一个压缩文件,通常用于存储多个相关文件,以便于传输或存储。ZIP是一种常见的文件压缩格式,它通过将多个文件组合在一起并进行压缩来节省磁盘空间和网络传输时间。 在这个压缩包中,...

    JAVA设计模式之调停者模式详解

    在Java中,调停者模式通过引入一个中介对象,也就是调停者,来协调多个对象之间的交互,避免对象之间直接引用,从而形成松散耦合的关系。 在实际场景中,例如电脑硬件系统,主板就是一个典型的调停者,它连接着CPU...

    23种设计模式(20)java中介者模式

    中介者模式也称为调停者模式,它的结构可以分为三部分:抽象中介者、中介者实现类和同事类。 抽象中介者定义了同事类对象到中介者对象的接口,用于各个同事类之间的通信。抽象中介者一般包括一个或几个抽象的事件...

    javascript设计模式 – 中介者模式原理与用法实例分析

    本文实例讲述了javascript设计模式 – 中介者模式原理与用法。分享给大家供大家参考,具体如下: ...中介者模式又称为调停者模式,它是一种对象行为型模式。 场景:我们来实现一个打招呼的小demo,由牛牛发送

    PHP设计模式之中介者模式(Mediator Pattern)入门与应用案例详解

    它就是,用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互,这种模式又称为调停者模式,它是一种对象行为型模式。 我们先来看用户...

    C#设计模式之Mediator中介者模式解决程序员的七夕缘分问题示例

    Mediator模式也被称为调停者模式,它能够将对象之间的耦合度降低,从而提高系统的灵活性和可维护性。 在本文中,我们将使用C#语言来实现Mediator模式,以解决程序员的七夕缘分问题。该示例中,我们将创建三个主要类...

    C++面向对象23种设计模式实现源码DesignPattern.zip

    4. **调停者模式(Mediator Pattern)**:调停者模式用于降低多个对象之间的耦合度,通过一个中介对象协调它们之间的通信。18.调停者模式Mediator展示了如何通过一个仲裁者类来处理对象间的交互,避免对象之间直接...

    java常用数据结构及算法集锦

    调停者模式 备忘录模式 解释器模式 迭代器模式 状态模式 责任链模式 访问者模式 结构与算法 基础概念 稀疏数组与二维数组 队列和栈结构 单向链表和双向链表 排序与查找算法 二叉树与多叉树 应用场景 RSA算法签名...

    Java中23种设计模式详解

    调停者模式用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式的内部表示。这种模式使得对象交互可以灵活地变化。 15. 备忘录模式(Memento) 备忘录模式在不破坏封装性的前提下,捕获一个对象的...

    C#23种设计模式_示例源代码及PDF

    13、CHAIN OF RESPONSIBLEITY —晚上去上英语课,为了好开溜坐到了最后一排,哇,前面 、 坐了好几个漂亮的 MM 哎, 找张纸条, 写上“Hi,可以做我的女朋友吗?如果不愿意请向前传”, 纸条就一个接一个的传上去了,...

    python实现常用的23种设计模式:含源代码、详细文档说明

    一、创建型模式 1、工厂方法模式【Factory Method】 2、抽象工厂模式【Abstract Factory】 ...8、调停者模式【Mediator】 9、备忘录模式【Memento】 10、迭代器模式【Iterator】 11、解释器模式【Interpreter】

    深入浅出java设计模式(高清中文PDF)

    所涉及的设计模式包括工厂模式、单例模式、建造模式、原型模式、适配器模式、桥梁模式、组合模式、装饰模式、门面模式、享元模式、代理模式、责任链模式、命令模式、解释器模式、迭代器模式、调停者模式、备忘录模式...

    阿里10年工作经验大牛设计模式金牌讲解(带案例)

    阿里10年工作经验大牛讲解设计模式(带案例) 设计模式综合案例 jdk中的设计模式 备忘录模式 策略模式 访问者模式 解释器模式 ...调停者模式 状态模式 多人联机射击游戏在实际开发中综合使用设计模式

    设计模式简介

    调停者模式定义一个中介对象来封装一系列对象之间的交互,使这些对象不需要显示地相互引用;备忘录模式捕获和外部化一个对象的内部状态,以便它可以被保存和恢复;迭代器模式提供一种方法顺序访问一个聚合对象中的...

Global site tag (gtag.js) - Google Analytics