设计模式18——行为型模式之中介者模式
2014-03-07 21:09
323 查看
定义:中介者模式(MediatorPattern),用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
类型:对象行为型模式
概述:
面向对象编程,鼓励将行为分散到对象当中。这样的好处,增强对象的可复用性,但是带来的负面作用是,当多个对象交互时不可避免地会带来耦合性的大大提升。
中介者模式的提出,就是为了解决多个对象相互交互时耦合性提升的问题。中介者模式主要通过将不同对象中涉及到交互的行为抽象出来,达到解耦的作用。这样,每个对象都只需要和中介者打交到即可,不用关注太多的对象。
比如一个项目组,有一个项目经理和几个项目开发人员。如,开发人员需要开发资料,直接找项目经理要,项目经理去协调采购人员进行采购。又如,开发人员需要了解一个具体的需求,也直接找项目经理,然后项目经理去找销售人员了解更详细的需求。总之,开发人员,需要什么,都直接找项目经理就可以了,而不必关心去找谁,并如何跟对象交流。这样看来,开发人员就不会和其他对象产生交互,也就不会有很大的耦合性,比较纯粹,专注于自己的开发就好。这样,只要技术过关的人都可以充当开发人员,而不必要有各种关系,沟通技巧之类的。提高了开发人员的可复用性。
类图:
参与者:
Mediator,提供与Staff交互的接口。
ProjectManger,实现具体的接口来完成和不同职员的交互。
Staff,提供成员与Mediator交互的基本接口。
Developer,Buyer,Seller,完成各自的工作,然后通过Meditor的接口告诉具体的ProjectManager。
示例代码:
适用性:
一组对象以定义良好但是复杂的方式进行通信。产生的相互依赖关系结构混乱且难以理解。
一个对象引用其他很多对象并且直接与这些对象通信,导致难以复用该对象。
想定制一个分面在多个类中的行为,而又不想生成太多的子类。
优缺点:
优点,降低对象之间的耦合度,提高对象的可复用用程度。
缺点,如果交互的对象过多,中介者会非常复杂,难于管理。
参考资料:
《设计模式——可复用面向对象软件基础》
《大话设计模式》
类型:对象行为型模式
概述:
面向对象编程,鼓励将行为分散到对象当中。这样的好处,增强对象的可复用性,但是带来的负面作用是,当多个对象交互时不可避免地会带来耦合性的大大提升。
中介者模式的提出,就是为了解决多个对象相互交互时耦合性提升的问题。中介者模式主要通过将不同对象中涉及到交互的行为抽象出来,达到解耦的作用。这样,每个对象都只需要和中介者打交到即可,不用关注太多的对象。
比如一个项目组,有一个项目经理和几个项目开发人员。如,开发人员需要开发资料,直接找项目经理要,项目经理去协调采购人员进行采购。又如,开发人员需要了解一个具体的需求,也直接找项目经理,然后项目经理去找销售人员了解更详细的需求。总之,开发人员,需要什么,都直接找项目经理就可以了,而不必关心去找谁,并如何跟对象交流。这样看来,开发人员就不会和其他对象产生交互,也就不会有很大的耦合性,比较纯粹,专注于自己的开发就好。这样,只要技术过关的人都可以充当开发人员,而不必要有各种关系,沟通技巧之类的。提高了开发人员的可复用性。
类图:
参与者:
Mediator,提供与Staff交互的接口。
ProjectManger,实现具体的接口来完成和不同职员的交互。
Staff,提供成员与Mediator交互的基本接口。
Developer,Buyer,Seller,完成各自的工作,然后通过Meditor的接口告诉具体的ProjectManager。
示例代码:
using System; using System.Collections.Generic; using System.Text; namespace MediatorPattern { abstract class Mediator { public abstract void Comunicate(string message, Staff colleague); } class ProjectManger : Mediator { private Developer staff1; private Buyer staff2; private Seller staff3; public Developer Staff1 { set { staff1 = value; } } public Buyer Staff2 { set { staff2 = value; } } public Seller Staff3 { set { staff3 = value; } } public override void Comunicate(string message, Staff staff) { staff.Notify(message); } } abstract class Staff { protected Mediator mediator; public Staff(Mediator mediator) { this.mediator = mediator; } public abstract void Notify(string message); } class Developer : Staff { public Developer(Mediator mediator) : base(mediator) { } public void Ask(string message) { mediator.Comunicate(message, this); } public override void Notify(string message) { Console.WriteLine("开发人员完成开发任务" + message); } } class Buyer : Staff { public Buyer(Mediator mediator) : base(mediator) { } public void Send(string message) { mediator.Comunicate(message, this); } public override void Notify(string message) { Console.WriteLine("采购人员已经知道" + message); } } class Seller : Staff { public Seller(Mediator mediator) : base(mediator) { } public void Tell(string message) { mediator.Comunicate(message, this); } public override void Notify(string message) { Console.WriteLine("销售人员已经知道" + message); } } class Program { static void Main(string[] args) { ProjectManger mediator = new ProjectManger(); Developer staff1 = new Developer(mediator); Buyer staff2 = new Buyer(mediator); Seller staff3 = new Seller(mediator); mediator.Staff1 = staff1; mediator.Staff2 = staff2; mediator.Staff3 = staff3; staff1.Ask("需要电路板"); staff2.Send("已经采购电路板"); staff1.Ask("需要客户需求"); staff3.Tell("已经去调查"); } } }
适用性:
一组对象以定义良好但是复杂的方式进行通信。产生的相互依赖关系结构混乱且难以理解。
一个对象引用其他很多对象并且直接与这些对象通信,导致难以复用该对象。
想定制一个分面在多个类中的行为,而又不想生成太多的子类。
优缺点:
优点,降低对象之间的耦合度,提高对象的可复用用程度。
缺点,如果交互的对象过多,中介者会非常复杂,难于管理。
参考资料:
《设计模式——可复用面向对象软件基础》
《大话设计模式》
相关文章推荐
- 设计模式18——行为型模式之中介者模式
- java设计模式(行为型)之中介者模式
- [置顶] 走穿java23种设计模式--18中介者模式详解
- 设计模式--行为型-Mediator(中介者)
- 设计模式笔记(17)---中介者模式(行为型)
- [设计模式笔记]三. 行为型模式--18. Iterator模式(迭代器)对象行为型模式(一)
- Java设计模式之行为型模式(中介者模式)
- [设计模式笔记]三. 行为型模式--19. Mediator模式(中介者)对象行为型模式(一)
- 行为型设计模式(职责链模式,命令模式,中介者模式,观察者模式,访问者模式)
- HeadFirst 设计模式学习笔记18--中介者(Mediator)模式拾零
- 设计模式(17)-行为型-中介者模式(Mediator)
- 设计模式 ( 十五 ) 中介者模式Mediator(对象行为型)
- 设计模式-行为型-中介者模式(Mediator)
- 设计模式18:Observer 观察者模式(行为型模式)
- 设计模式笔记(18)---迭代器模式(行为型)
- java设计模式--行为型模式--中介者模式
- 设计模式(二十二)—中介者模式(行为型)
- 设计模式笔记(17)---中介者模式(行为型)
- 23种设计模式4--行为型模式(策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式)
- 设计模式 ( 十五 ) 中介者模式Mediator(对象行为型)