设计模式之行为型模式—— 3.8 中介者模式

<?php

	/**
	 * 3.8 中介者模式
	 * 	定义:
	 * 		用一个中介对象来封装一系列的对象交互。中介
	 * 		者使各对象不需要显式的相互引用,从而使其耦
	 * 		合松散,而起可以独立的改变它们之间的交互。
	 * 
	 * 	角色:
	 * 		1. 抽象中介者(Mediator)类
	 * 			职责:定义了同事对象到中介者对象的接口
	 * 		2. 具体中介者类
	 * 			职责:实现抽象类的方法,它需要知道所有
	 * 				  具体同事类,并从具体同事接收消息
	 * 				  ,向具体同事对象发出命令。
	 * 		3. 抽象同事(Colleague)类
	 * 			职责:
	 * 		4. 具体同事类
	 * 			职责:每个具体同事只知道自己的行为,而
	 * 				  不了解其他同事类的情况,但它们却
	 * 				  都认识中介者对象。
	 * 
	 * 	优点:
	 * 	 	1. 中介者Mediator的出现减少了各个同事Colleague
	 * 	 	   的耦合使得可以独立的改变和复用各个Colleague
	 * 	 	   类和Mediator;
	 * 	 	2. 由于把对象如何协作进行了抽象,将中介作为
	 * 	 	   一个独立的概念并将其封装在一个对象中,这样
	 * 	 	   关注的对象就从对象各自本身的行为转移到他们
	 * 	 	   之间的交互上来,也就是站在一个更宏观的角度
	 * 	 	   去看待系统。
	 *
	 * 	缺点:
	 * 		1. 当具体的同事类越来越多时,系统就比较难于维护了。
	 *
	 *	使用场景:
	 *		1. 一组对象以定义良好但是复杂的方式进行通信。产生
	 *		   的相互依赖关系结构混乱且难以理解时;
	 *		2. 一个对象引用其他很多对象并且直接与这些对象通信
	 *		3. 想定制一个分布在多个类中的行为,而又不想生成太
	 *		   多的子类。
	 *
	 * 
	 */
	header(‘content-type:text/html;charset=utf8‘);

	//抽象中介者
	abstract class Mediator{
		//定义一个抽象的发送消息方法,
		//得到同事对象和发送信息。
		abstract public function send($message,Colleague $colleague);
	}
	//具体中介者类
	class ConcreteMediator extends Mediator{
		private $colleague1;
		private $colleague2;
		public function addColleague1(ConcreteColleague1 $colleague1){
			$this->colleague1=$colleague1;
		}
		public function addColleague2(ConcreteColleague2 $colleague2){
			$this->colleague2=$colleague2;
		}
		public function send($message,Colleague $colleague){
			if($colleague == $this->colleague1){
				$this->colleague2->notify($message);
			}else{
				$this->colleague1->notify($message)	;
			}
		}
	}
	//抽象同事类
	abstract class Colleague{
		protected $mediator;
		//构造方法,得到中介者对象
		public function __construct(Mediator $mediator){
			$this->mediator=$mediator;
		}
	}

	//具体同事类
	class ConcreteColleague1 extends Colleague{
		public function send($message){
			//表示消息是由中介者代替发送的,
			//并且发送的的人是$this
			$this->mediator->send($message,$this);
		}
		//注意:方法notify的消息($message)是
		//		由另外一个同事发给他的消息;而
		//		方法send中的消息($message)是
		//		他自己要发出的消息。
		public function notify($message){
			echo ‘同事1得到的信息是:‘.$message;
		}
	}
	class ConcreteColleague2 extends Colleague{
		public function send($message){
			$this->mediator->send($message,$this);
		}
		public function notify($message){
			echo ‘同事2得到的消息是:‘.$message;
		}
	}

	//客户端
	//生成中介
	$mediator=new ConcreteMediator();
	//生成发起消息的对象
	$colleague1=new ConcreteColleague1($mediator);
	$colleague2=new ConcreteColleague2($mediator);
	//将所有要发送消息的人添加到中介里
	$mediator->addColleague1($colleague1);
	$mediator->addColleague2($colleague2);
	//双方开始通过中介发送消息
	$colleague1->send(‘我是张三,你到家了吗?‘);
	$colleague2->send(‘还没到,还在车上?‘);

?>
时间: 2024-12-28 16:50:09

设计模式之行为型模式—— 3.8 中介者模式的相关文章

《JAVA与模式》之中介者模式(转载)

原文出处:http://blog.csdn.net/zhengzhb/article/details/7430098   定义:用一个中介者对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而使耦合松散,而且可以独立地改变它们之间的交互. 类型:行为类模式 类图: 中介者模式的结构 中介者模式又称为调停者模式,从类图中看,共分为3部分: 抽象中介者:定义好同事类对象到中介者对象的接口,用于各个同事类之间的通信.一般包括一个或几个抽象的事件方法,并由子类去实现. 中介者实现类:从抽象

(行为型模式二)中介者模式

package com.modle; /** * 中介者模式 * @author k560 * */ /*需求:产品A要比产品B贵100块,当改A的价格,B的价格也要同步改动,反过来也一样*/ public class Mediator extends AbstractMediator{ private AbstracProduct productA; private AbstracProduct productB; public Mediator(AbstracProduct productA

php模式设计之 中介者模式

中介者模式 中介者模式用于开发一个对象,这个对象能够在类似对象相互之间不直接相互的情况下传送或者调解对这些对象的集合的修改.一般处理具有类似属性,需要保持同步的非耦合对象时,最佳的做法就是中介者模式.PHP中不是特别常用的设计模式. 设计场景: 我们有一个CD类和一个MP3类,两个类的结构相似. 我们需要在CD类更新的时候,同步更新MP3类. 传统的做法就是在CD类中实例化MP3类,然后去更新,但是这么做的话,代码就会很难维护,如果新增一个同样的MP4类,那么就没法处理了. 中介者模式很好的处理

设计模式C#实现(十六)——中介者模式

意图 0 适用性 1 结构 2 实现 3 效果 4 参考 5 意图 用一个中介对象来封装一系列的对象交互.中介者使各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变他们之间的交互. 适用性 一组对象以定义良好但是复杂的方式进行通信.产生的相互依赖关系结构混乱且难以理解. 一个对象引用其他很多对象并且之间 想定制一个分布在多个类中的行为,而又不想生成太多子类. 结构 实现 在未来的智能家居中,家里的各种电器相互关联,假设这样三种电器:闹钟,日历和咖啡壶.现在有这样两个任务: 当按下闹

C#设计模式之十七中介者模式(Mediator Pattern)【行为型】

原文:C#设计模式之十七中介者模式(Mediator Pattern)[行为型] 一.引言 今天我们开始讲"行为型"设计模式的第五个模式,该模式是[中介者模式],英文名称是:Mediator Pattern.还是老套路,先从名字上来看看."中介者模式"我第一次看到这个名称,我的理解是,在两个对象中间增加一个"中间对象","中间对象"协调两个对象的关系,但是随着理解的深入,"中间对象"处理关系的对象可能不只是

设计模式(17)--Mediator(中介者模式)行为型

1.模式定义: 用一个中介者对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而使耦合松散,而且可以独立地改变它们之间的交互. 中介者模式是对象的行为模式.中介者模式包装了一系列对象相互作用的方式,使得这些对象不必相互明显引用.从而使它们可以较松散地耦合.当这些对象中的某些对象之间的相互作用发生改变时,不会立即影响到其他的一些对象之间的相互作用.从而保证这些相互作用可以彼此独立地变化. 2.模式特点: 中介者就是一个处于众多对象中间,并恰当地处理众多对象之间相互之间的联系的角色.以

Java 设计模式之中介者模式

本文继续23种设计模式系列之中介者模式. 定义 用一个中介者对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而使耦合松散,而且可以独立地改变它们之间的交互. 角色 抽象中介者:定义好同事类对象到中介者对象的接口,用于各个同事类之间的通信.一般包括一个或几个抽象的事件方法,并由子类去实现. 中介者实现类:从抽象中介者继承而来,实现抽象中介者中定义的事件方法.从一个同事类接收消息,然后通过消息影响其他同时类. 同事类:如果一个对象会影响其他的对象,同时也会被其他对象影响,那么这两个对

设计模式--14、中介者模式

定义:用一个中介者对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而使耦合松散,而且可以独立地改变它们之间的交互. 类型:行为类模式 看看结构图的形象描述吧: 中介者模式的结构 中介者模式又称为调停者模式,从类图中看,共分为3部分: 抽象中介者:定义好同事类对象到中介者对象的接口,用于各个同事类之间的通信.一般包括一个或几个抽象的事件方法,并由子类去实现. 中介者实现类:从抽象中介者继承而来,实现抽象中介者中定义的事件方法.从一个同事类接收消息,然后通过消息影响其他同时类. 同事

Java经典23种设计模式之行为型模式(一)

行为型设计模式有11种,分别是Chain of Responsibility ( 责任链模式 ).Command ( 命令模式 ).Interpreter ( 解释器模式 ) .Iterator ( 迭代器模式 ).Mediator ( 中介者模式 ) .Memento ( 备忘录模式 ) .Observer ( 观察者模式 ).State ( 状态模式 ) .Strategy ( 策略模式 ).TemplateMethod ( 模板方法 ).Visitor ( 访问者模式 ),本文介绍这11种