中介者抽象
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说:刚才谁说我坏话啦???
本文介绍了一个基于中介者模式的项目沟通管理系统实现案例。系统通过定义中介者类来封装一系列对象交互,降低各对象间的耦合度。具体实现包括抽象中介者、具体中介者及不同角色的参与者类。
821

被折叠的 条评论
为什么被折叠?



