博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式漫谈之中介者模式
阅读量:6156 次
发布时间:2019-06-21

本文共 2082 字,大约阅读时间需要 6 分钟。

天太热,失眠了,实在睡不下去,就再写篇文章来静静心吧,我为什么写设计模式,因为设计模式是思想上的东西,程序员的法宝之一就是编程思想。

在面向对象中,对象之间的认识是分角度的,比如A对象,B对象,如果A对象存了B对象的引用,那么从A对象的角度来说,A对象认识B对象,但是B对象不认识A对象,如果B对象也存了A对象的引用,这时,才能说A,B互相认识。

或者是A,B对象互相不认识,但是A,B对象都认识C对象,而C对象认识A,B对象,这样,可以通过C对象来间接让A,B对象互相认识,互相通信。扮演红娘角色,即中介角色。

对象之间的认识分区域性,比如在对象的整个生命中期都认识的对象(父母),或者是过客,我只在某个时间(时间即空间)认识的对象(某个旅游景点认识的驴友)。

比如种种原因,两个对象不想直接发生关系,就找一个中间人传话。

直接上例子,我来解释:

//抽象对象UnitedNations在方法中认识Country 

abstract class UnitedNations

{
public abstract void Declare(string message, Country colleague);
}

//具体对象认识USA, Iraq 这两个对象在方法中认识Country这个对象

class UnitedNationsSecurityCouncil : UnitedNations

{
private USA colleague1;
private Iraq colleague2;

public USA Colleague1

{
set { colleague1 = value; }
}

public Iraq Colleague2

{
set { colleague2 = value; }
}

public override void Declare(string message, Country colleague)

{
if (colleague == colleague1)
{
colleague2.GetMessage(message);
}
else
{
colleague1.GetMessage(message);
}
}
}

//抽象对象认识UnitedNations 这个对象

abstract class Country

{
protected UnitedNations mediator;

public Country(UnitedNations mediator)

{
this.mediator = mediator;
}
}

//具体对象USA在整个生命周期中都认识mediator这个对象

class USA : Country

{
public USA(UnitedNations mediator)
: base(mediator)
{

}

public void Declare(string message)
{
mediator.Declare(message, this);
}
public void GetMessage(string message)
{
Console.WriteLine("美国获得对方信息:" + message);
}
}

//具体对象在整个生命中期都认识mediator

class Iraq : Country

{
public Iraq(UnitedNations mediator)
: base(mediator)
{
}

public void Declare(string message)
{
mediator.Declare(message, this);
}
public void GetMessage(string message)
{
Console.WriteLine("伊拉克获得对方信息:" + message);
}

}

/具体的中介对象

UnitedNationsSecurityCouncil UNSC = new UnitedNationsSecurityCouncil();

//c1 对象认识中介者

USA c1 = new USA(UNSC);

//c2对象也认识中介者

Iraq c2 = new Iraq(UNSC);

//中介者认识c1,c2两个对象

UNSC.Colleague1 = c1;

UNSC.Colleague2 = c2;

//c1说话,让中介者传话

c1.Declare("不准研制核武器,否则要发动战争!");

//同样c2发消息也是让中介者传话

c2.Declare("我们没有核武器,也不怕侵略。");

 

总结,对象之间的认识关系分区域性,在哲学中,区域性相当于时间性,对象认识另一个对象,必须可以访问另一个对象的空间,即另一个对象的引用。

老生常谈,编程的法宝之一就是编程思想。

转载于:https://www.cnblogs.com/wang-charle/p/9248782.html

你可能感兴趣的文章
AndroidStudio中导入SlidingMenu报错解决方案
查看>>
修改GRUB2背景图片
查看>>
Ajax异步
查看>>
好记性不如烂笔杆-android学习笔记<十六> switcher和gallery
查看>>
JAVA GC
查看>>
3springboot:springboot配置文件(外部配置加载顺序、自动配置原理,@Conditional)
查看>>
前端第七天
查看>>
图解SSH原理及两种登录方法
查看>>
【总结整理】JQuery基础学习---样式篇
查看>>
查询个人站点的文章、分类和标签查询
查看>>
基础知识:数字、字符串、列表 的类型及内置方法
查看>>
JSP的隐式对象
查看>>
JS图片跟着鼠标跑效果
查看>>
[SCOI2005][BZOJ 1084]最大子矩阵
查看>>
学习笔记之Data Visualization
查看>>
Leetcode 3. Longest Substring Without Repeating Characters
查看>>
416. Partition Equal Subset Sum
查看>>
app内部H5测试点总结
查看>>
[TC13761]Mutalisk
查看>>
while()
查看>>