中介者模式
中介者模式主要用来降低多个对象和类之间的通信复杂度。主要提供了一个中介类,来处理不同类之间的通信。该类属于行为型模式
优点:1,降低了类的复杂度,将一对多转为了一对一。2各类之间解耦。3.符合迪米特原则。
缺点:中介者易变得复杂,不便于维护。
关键逻辑:将所有类之间的通信封装到一个类里进行处理。
何时使用:多个类相互耦合,形成网状结构的时候使用。
应用例子:1,MVC模式。C(控制器)就是M(模型)和V(视图)的中介者。2.中国和其他国家的交流,通过WTO来互相贸易,其他国家也是通过WTO来跟中国交流。
注意事项:不能在职责混乱的时候使用。
下面举个例子来进行说明一下:
如图画了一下大概结构:
具体代码如下:
1,首先创建一个聊天室类。
/// <summary>
/// 创建中介者类(聊天室)
/// </summary>
public class ChatRoom
{
/// <summary>
/// 发信息
/// </summary>
public static void SendMessage(string message,User user,User receiveuser)
{
Debug.Log(user+"发信息:"+message);
receiveuser.ReceiveMessage(message,receiveuser);
}
/// <summary>
/// 收信息
/// </summary>
public static void ReceiveMessage(string message, User user)
{
Debug.Log(user+"收到信息:"+message);
}
}
2.创建一个用户的接口。
/// <summary>
/// 用户的接口
/// </summary>
public interface User
{
void SendMessage(string message, User user);
void ReceiveMessage(string message, User user);
}
3.创建用户接口的实体类。
/// <summary>
/// 小明用户
/// </summary>
public class XiaoMing_User : User
{
public void ReceiveMessage(string message,User user)
{
ChatRoom.ReceiveMessage(message, user);
}
public void SendMessage(string message, User user)
{
ChatRoom.SendMessage(message, this,user);
}
}
/// <summary>
/// 小王用户
/// </summary>
public class XiaoWang_User : User
{
public void ReceiveMessage(string message, User user)
{
ChatRoom.ReceiveMessage(message, user);
}
public void SendMessage(string message, User user)
{
ChatRoom.SendMessage(message,this,user);
}
}
4.创建一个小明跟小王聊天的一个Demo。
public class Demo : MonoBehaviour
{
void Start()
{
User user=new XiaoMing_User();
user.SendMessage("我们今天一起去打球吧",new XiaoWang_User());
}
}
运行结果: