设计模式 | 定义 | 案例 | 问题堆积在哪里 | 解决办法 |
中介者 | 代替了多个对象之间的互动 使对象1 2 3 之间的互动 变为: 对象1->中介 对象2->中介 对象3->中介 | 好友之间 约饭 | 好友1 通知 好友2 -3 -4 等等 | 加一个群 谁想吃饭就 通知一下 |
角色
BasePeople // 基类
FriendA
FriendB
FriendC
FriendGroup // 群
-
- public abstract class BasePeople
- {
- public string name;
-
- public abstract void ReceiverMsg(string msg);
-
- public abstract void Send(string msg);
- }
- 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
- 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
gruop = new List(); -
- // 添加
- 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()
- {
- // 创建people
- BasePeople 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点吃饭!");
- }
- }
在 多对象之间互相通信 提炼出一个中介者 ,会让类图变得简单漂亮