代理模式和中介者模式,都会有一个中间类,即所谓的代理者和中介者,那这两个模式有哪些区别呢,我们把这两个模式放到一起来看一下。
第一回合——定义比较
代理模式:为其他对象提供一种代理以控制对这个对象的访问。
中介者模式:用一个中介对象来封装一系列的对象交互,中介者使对象不需要显式的相互引用,从而使其耦合松散,而且可以独立的改变他们之间的交互。
第二回合——类图比较
代理模式类图:
中介者模式类图:
第三回合——适用情况对比
代理模式:
一、 远程代理,为一个对象在不同的地址空间提供局部代表,这样可以隐藏一个对象存在于不同的地址空间的事实。
二、 虚拟代码,根据需要创建开销很大的对象,通过他来存放实例化需要很长时间的真是对象。
三、 安全代理,用来控制这也是对象访问时的权限。
四、 职能指引,当调用真实的对象时,代理处理另外一些事。
中介者模式:
一、 应用于一组对象以定义良好但是复杂的方式进行通信的场合。
二、 应用于想定制一个分布在多个类中的行为,而又不想生成太多子类的场合。
第四回合——代码对比
<span style="font-size:18px;"><strong>代理模式:</strong>
Class Proxy : IGiveGift //实现送礼物的接口
{
Pursuit gg; //定义追求者类对象
Public Proxy(SchoolGirl mm)
{
gg = new Pursuit(mm)
}
Public void GiveDolls()
{
gg.GiveDolls();
}
}
//客户端
Proxy daily = new Proxy(jiaojiao);
Daily.GiveDolls(); //实现代理
</span>
<span style="font-size:18px;"><strong>中介者模式:</strong>
class UnitedNationsSecurityCouncil : UnitedNations //安理会继承联合国机构
{
Private USA colleague1;
Private Irap colleague2;
//安理会拥有美国和伊拉克的对象属性
Public USA Colleague1
{
………..
}
//重写声明方法,实现了两个对象那个之间的通信
Public override void Declare(string message, Country colleague)
{
…………..
}
}
//客户端
//让美国和伊拉克认识安理会
…………
//让安理会知道美国和伊拉克的存在
………..
Meiguo.Declare("……….");
Yilake.Declare("………");
</span>
经过纵向对比,我发现这两个模式的区别还是很大的,不能因为仅仅因为这两个模式都需要一个中间者就把这两个模式混淆了。