C#设计模式之十七中介者模式(Mediator Pattern)【行为型】
一、引言 2.4、模式的组成 ?? ? ??? 可以看出,在中介者模式的结构图有以下角色: ??? (1)、抽象中介者角色(Mediator):在里面定义各个同事之间交互需要的方法,可以是公共的通信方法,也可以是小范围的交互方法。 ??? (2)、具体中介者角色(ConcreteMediator):它需要了解并维护各个同事对象,并负责具体的协调各同事对象的交互关系。 ??? (3)、抽象同事类(Colleague):通常为抽象类,主要约束同事对象的类型,并实现一些具体同事类之间的公共功能,比如,每个具体同事类都应该知道中介者对象,也就是具体同事类都会持有中介者对象,都可以到这个类里面。 ??? (4)、具体同事类(ConcreteColleague):实现自己的业务,需要与其他同事通信时候,就与持有的中介者通信,中介者会负责与其他同事类交互。 2.5、中介者模式的代码实现 ??? 中介者模式在现实生活中也有类似的例子,不论是QQ群或者是微信群,或者手提电话,它们都是充当一个中间平台,QQ用户可以登录这个中间平台与其他QQ用户进行交流,如果没有这些中间平台,我们如果想与朋友进行聊天的话,可能就需要当面才可以了。比如:在公司管理过程中,就会涉及到各个部门之间的协调和合作,如何各个部门直接来沟通,看着好像直接高效,其实不然。各个部门之间为了完成一个工作,沟通协调就需要一个人来做这个工作,谁呢?总经理,我们这里就把总经理定义为成总的管理者,各个部门需要向他汇报和发起工作请求。我们看代码吧,实现代码如下: 1 namespace 中介者模式的实现 2 { 3 //抽象中介者角色 4 public interface Mediator 5 { 6 void Command(Department department); 7 } 8 9 总经理--相当于具体中介者角色 10 sealed class President : Mediator 11 12 总经理有各个部门的管理权限 13 private Financial _financial; 14 Market _market; 15 Development _development; 16 17 SetFinancial(Financial financial) 18 { 19 this._financial = financial; 20 } 21 SetDevelopment(Development development) 22 23 this._development = development; 24 25 SetMarket(Market market) 26 27 this._market = market; 28 29 30 Command(Department department) 31 32 if (department.GetType() == typeof(Market)) 33 { 34 _financial.Process(); 35 } 36 37 38 39 同事类的接口 40 abstract Department 41 42 持有中介者(总经理)的引用 43 Mediator mediator; 44 45 protected Department(Mediator mediator) 46 47 this.mediator = mediator; 48 49 50 public Mediator GetMediator 51 52 get { return mediator; } 53 private set { value; } 54 55 56 做本部门的事情 57 Process(); 58 59 向总经理发出申请 60 Apply(); 61 62 63 开发部门 64 Development : Department 65 66 public Development(Mediator m) : base(m) { } 67 68 override Process() 69 70 Console.WriteLine("我们是开发部门,要进行项目开发,没钱了,需要资金支持!"); 71 72 73 Apply() 74 75 Console.WriteLine(专心科研,开发项目! 76 77 78 79 财务部门 80 Financial : Department 81 82 public Financial(Mediator m) : 83 84 85 86 Console.WriteLine(汇报工作!没钱了,钱太多了!怎么花? 87 88 89 90 91 Console.WriteLine(数钱! 92 93 94 95 市场部门 96 Market : Department 97 98 public Market(Mediator mediator) : (mediator) { } 99 100 101 102 Console.WriteLine(汇报工作!项目承接的进度,需要资金支持!103 GetMediator.Command(this104 105 106 107 108 Console.WriteLine(跑去接项目!109 110 111 112 113 Program 114 115 static Main(String[] args) 116 117 President mediator = new President(); 118 Market market = Market(mediator); 119 Development development = Development(mediator); 120 Financial financial = Financial(mediator); 121 122 mediator.SetFinancial(financial); 123 mediator.SetDevelopment(development); 124 mediator.SetMarket(market); 125 126 market.Process(); 127 market.Apply(); 128 129 Console.Read(); 130 131 132 }
从上图可以发现,如果不使用中介者模式的话,每个对象之间过度耦合,这样的既不利于类的复用也不利于扩展。如果引入了中介者模式,那么对象之间的关系将变成星型结构,采用中介者模式之后会形成如下图所示的结构: ? 从上图可以发现,使用中介者模式之后,任何一个类的变化,只会影响中介者和类本身,不像之前的设计,任何一个类的变化都会引起其关联所有类的变化。这样的设计大大减少了系统的耦合度。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |