先上代码 逻辑有空在理 有问题的地方还望大神们指教指教
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; class Program { static void Main(string[] args) { Mediator mr = new Mediator(); Coder cr = new Coder(mr); //创建的时候把这个实现XXX接口的类塞到字典里 Boss bs = new Boss(mr); Worker wr = new Worker(mr); wr.Inter(); Console.Read(); } } public interface IMediator { void ExcuteCommand(InterFlow IF); bool AddMangerObj(InterFlow obj); } public class Mediator : IMediator { public Dictionary<string, InterFlow> myMangerObj; public Mediator() { myMangerObj = new Dictionary<string, InterFlow>(); } //在星状图的非原点创建时加入原点事件的处理中心 public bool AddMangerObj(InterFlow obj) { var className = obj.GetType().ToString(); if (!myMangerObj.ContainsKey(className)) { myMangerObj[className] = obj; return true; } return false; } public void ExcuteCommand(InterFlow IF) { Console.WriteLine(IF.GetType().ToString());//注意这里如果有命名控件则会出现xxx.xxx的情况 具体自己打印试效果 switch (IF.GetType().ToString()) { case "Worker": myMangerObj["Boss"].Inter(); break; case "Coder": myMangerObj["Worker"].Experession(); break; case "Boss": myMangerObj["Coder"].Inter(); break; default: return; } } } public abstract class InterFlow { protected IMediator mediator; protected InterFlow(IMediator IM) { mediator = IM; IM.AddMangerObj(this); } public abstract void Inter(); public abstract void Experession(); } public class Worker : InterFlow { public Worker(IMediator M) : base(M) { } public override void Inter() { Console.WriteLine("打工赚钱"); mediator.ExcuteCommand(this); } public override void Experession() { Console.WriteLine("无聊"); } } public class Coder : InterFlow { public Coder(IMediator M) : base(M) { } public override void Experession() { Console.WriteLine("码字的"); } public override void Inter() { Console.WriteLine("恰屎"); } } public class Boss : InterFlow { public Boss(IMediator M) : base(M) { } public override void Experession() { Console.WriteLine("收钱的"); } public override void Inter() { Console.WriteLine("icu"); } }