Mediator模式-管理对象间交互映射/双向关联由Colleague子类驱动

Mediator模式- 双向调用,迪米特法则的经典应用网状结构简化为星型结构,不仅仅是维护了各个相关类那么简单, 主要是定义了各个子类之间通信的映射(map或者数组)规则,当一个逻辑类注册了Mediator子类后发送消息会跳转到相应的其它逻辑类调用,且Mediator接口(有子类)定义了映射和操作方法给逻辑类用,逻辑子类有基类接口(繁多子类),基类接口注册给Mediator且定义标准操作方法,他们是双向调用的
和Facade模式区别:Facade是单向地去管理内部逻辑子类,Mediator与逻辑子类间是双向关联的

和State模式区别:Stated的数据主体类是定义各个状态子类,主体类并不了解状态间的转换,状态转换被放置到了状态子类中。Mediator定义了各个逻辑子类间的映射调用关系;State驱动发出是数据主体类设置了状态后发出的,Mediator的驱动是由逻辑子类发出的

Mediator UML:

抽象中介者(Mediator):中介者定义一个接口用于与各同事(Colleague)对象通信。
具体中介者(ConcreteMediator): 具体中介者通过协调各同事对象实现协作行为。了解并维护它的各个同事。
抽象同事类(Colleague class): 定义同事类接口,定义各同事的公有方法.
具体同事类(ConcreteColleague): 实现抽象同事类中的方法。每一个同时类需要知道中介者对象;每个具体同事类只需要了解自己的行为,而不需要了解其他同事类的情况。每一个同事对象在需与其他的同事通信的时候,与它的中介者通信。


设计时候:

Colleague有Send和Notify函数,Send是用Mediator对象Operation方法传入本类名实现的,Notify是本类被调用的反应。

Mediator有Operation方法和维护对象间关系的映射表。

使用时候:

  1. $objMediator = new  ConcreteMediator();  
  2. $objC1 = new ConcreteColleague1($objMediator);  
  3. $objC2 = new ConcreteColleague2($objMediator);  
  4. $objC3 = new ConcreteColleague3($objMediator);  
  5.   
  6. $objC1->send("from ConcreteColleague1");  
  7. $objC2->send("from ConcreteColleague2");  
  8. $objC3->send("from ConcreteColleague3");

当Mediator维护了数据或者状态发生变化时候,Colleague可使用Observers模式与Mediator通信

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值