中介者模式 MediatorPattern

本文介绍了一个基于中介者模式的项目沟通管理系统实现案例。系统通过定义中介者类来封装一系列对象交互,降低各对象间的耦合度。具体实现包括抽象中介者、具体中介者及不同角色的参与者类。

中介者抽象

public abstract class abstractMediator { public abstract void NotifySomeone(string message, Programer programer); }

中介者实现A

using System; using System.Collections; public class ProgramerGroupMediator : abstractMediator { private ArrayList _Employee; public ProgramerGroupMediator() { _Employee = new ArrayList(); } public void AddEmployee(Programer programer) { _Employee.Add(programer); } public override void NotifySomeone(string message, Programer programer) { string _ProgramerType = programer.GetType().Name.ToLower(); Programer tmpProgramer; switch (_ProgramerType) { case "coder": tmpProgramer = findEmployee("teamleader"); if (tmpProgramer != null) tmpProgramer.ReceiveMessage(message); break; case "teamleader": tmpProgramer = findEmployee("projectmanager"); if (tmpProgramer != null) tmpProgramer.ReceiveMessage(message); break; case "projectmanager": tmpProgramer = findEmployee("coder"); if (tmpProgramer != null) tmpProgramer.ReceiveMessage(message); tmpProgramer = findEmployee("teamleader"); if (tmpProgramer != null) tmpProgramer.ReceiveMessage(message); break; } } Programer findEmployee(string type) { string tmpType; Programer tmpProgramer=null; foreach (Programer p in _Employee) { tmpType = p.GetType().Name.ToLower(); if (tmpType == type) { tmpProgramer = p; break; } } return tmpProgramer; } }

参与者抽象

using System; public abstract class Programer { private string _FirstName, _LastName; private abstractMediator _Mediator; public Programer(string firstname,string lastname,abstractMediator mediator) { _FirstName = firstname; _LastName = lastname; _Mediator=mediator; } public string FirstName { get { return _FirstName; } } public string LastName { get { return _LastName; } } public override string ToString() { return _FirstName + _LastName; } public void SendMessage(string message) { _Mediator.NotifySomeone(message, this); } public abstract void ReceiveMessage(string message); }

参与者A

using System; public class Coder : Programer { public Coder(string firstname, string lastname, abstractMediator mediator) : base(firstname, lastname, mediator) { } public override void ReceiveMessage(string message) { Console.WriteLine("项目程序员 {0} 收到了消息:{1}", FirstName + LastName, message); } };

参与者B

using System; public class TeamLeader : Programer { public TeamLeader(string firstname, string lastname, abstractMediator mediator) : base(firstname, lastname, mediator) { } public override void ReceiveMessage(string message) { Console.WriteLine("项目组长 {0} 收到了消息:{1}", FirstName + LastName, message); } };

参与者C

using System; public class ProjectManager : Programer { public ProjectManager(string firstname, string lastname, abstractMediator mediator) : base(firstname, lastname, mediator) { } public override void ReceiveMessage(string message) { Console.WriteLine("项目经理 {0} 收到了消息:{1}", FirstName + LastName, message); } };

调用者

using System; using System.Collections.Generic; using System.Text; namespace MediatorPattern { class Program { static void Main(string[] args) { ProgramerGroupMediator pgm = new ProgramerGroupMediator(); Programer Jim = new Coder("Jim", "Green", pgm); Programer Lucy = new Coder("Lucy", "Li", pgm); Programer WangMing = new TeamLeader("Wang", "Ming", pgm); Programer Bill = new ProjectManager("Bill", "Gate", pgm); pgm.AddEmployee(Jim); pgm.AddEmployee(Lucy); pgm.AddEmployee(WangMing); pgm.AddEmployee(Bill); Jim.SendMessage("Jim说:头,这活儿我做不来。Lucy可以搞定!"); Lucy.SendMessage("Lucy说:头,jim他想偷懒,他今天想早点下班去约会,这活我不干!"); WangMing.SendMessage("WangMing说:每个人都认真干自己的事,不然我就告诉Bill去。"); Bill.SendMessage("Bill说:刚才谁说我坏话啦???"); Console.ReadKey(); } } }

执行结果:

项目组长 WangMing 收到了消息:Jim说:头,这活儿我做不来。Lucy可以搞定!
项目组长 WangMing 收到了消息:Lucy说:头,jim他想偷懒,他今天想早点下班去约会,这
活我不干!
项目经理 BillGate 收到了消息:WangMing说:每个人都认真干自己的事,不然我就告诉Bil
l去。
项目程序员 JimGreen 收到了消息:Bill说:刚才谁说我坏话啦???
项目组长 WangMing 收到了消息:Bill说:刚才谁说我坏话啦???

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值