中介者模式
介绍
设计模式 | 定义 | 案例 | 问题堆积在哪里 | 解决办法 |
中介者 | 代替了多个对象之间的互动 使对象1 2 3 之间的互动 变为: 对象1->中介 对象2->中介 对象3->中介 | 好友之间 约饭 | 好友1 通知 好友2 -3 -4 等等 | 加一个群 谁想吃饭就 通知一下 |
类图
代码
角色
BasePeople // 基类
FriendA
FriendB
FriendC
FriendGroup // 群
BasePeople
public abstract class BasePeople
{public string name;public abstract void ReceiverMsg(string msg);public abstract void Send(string msg);
}
FriendA
using UnityEngine;public class FriendA : BasePeople
{FriendA() { }public FriendA(string name){this.name = name;}public override void ReceiverMsg(string msg){Debug.Log(name + "接收:" + msg);}public override void Send(string msg){Debug.Log(name + "发送:" + msg);FriendGroup.GetIns().SendAllPeopleMsg(name, msg);}
}
FriendB 类似A
FriendC类似A
FriendGroup
using System.Collections.Generic;public class FriendGroup
{//---------------------------------------------static FriendGroup self = null;private FriendGroup() { }public static FriendGroup GetIns(){if (null == self){self = new FriendGroup();}return self;}//--------------------------------------------List<BasePeople> gruop = new List<BasePeople>();// 添加public void AddPeople(BasePeople friend){if (null == friend)return;gruop.Add(friend);}// 发送public void SendAllPeopleMsg(string senderName, string msg){foreach (var item in gruop){if (senderName != item.name){item.ReceiverMsg(msg);}}}}
测试代码
using UnityEngine;public class TestZJZ : MonoBehaviour
{void Start(){// 创建peopleBasePeople p1 = new FriendA("P1");BasePeople p2 = new FriendA("P2");BasePeople p3 = new FriendA("P3");// 创建群FriendGroup group = FriendGroup.GetIns();group.AddPeople(p1);group.AddPeople(p2);group.AddPeople(p3);p3.Send("晚上8点吃饭!");}
}
结果
总结
在 多对象之间互相通信 提炼出一个中介者 ,会让类图变得简单漂亮