概要
用一个中介对象来封装一系列对象交互。中介者使各对象不需要相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
类图
运行

代码
using System;
using System.Collections.Generic;
namespace 中介者模式
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
Program p = new Program();
p.main();
Console.ReadLine();
}
void main()
{
Mediator mediator = new Mediator();
Tank tank1 = new Tank();
Tank tank2 = new Tank();
Tank tank3 = new Tank();
mediator.register(tank1);
mediator.register(tank2);
mediator.register(tank3);
tank1.send(2, "你好");
}
}
// 抽象层-------------------------------------------
interface IMediator
{
void send(int byid, int toid, string msg);
void register(IColleague colleague);
}
interface IColleague
{
void send(int toid, string msg);
void receive(int byid, string msg);
int getId();
void setMediato(IMediator mediator);
}
// 实现层-------------------------------------------
class Mediator: IMediator
{
List<IColleague> colleagues = new List<IColleague>();
public Mediator()
{
}
public void register(IColleague colleague)
{
colleagues.Add(colleague);
colleague.setMediato(this);
}
public void send(int byid, int toid, string msg)
{
getTank(toid).receive(byid, msg);
}
private IColleague getTank(int id)
{
foreach(IColleague colleague in colleagues)
{
if(colleague.getId() == id)
{
return colleague;
}
}
return null;
}
}
class Tank: IColleague
{
static int index = 0;
public IMediator mediator;
int id = 0;
public Tank()
{
id = Tank.index++;
}
public void setMediato(IMediator mediator)
{
this.mediator = mediator;
}
public void send(int toid, string msg) {
mediator.send(id, toid, msg);
Console.WriteLine($"收到:{id}to{toid}:{msg}");
}
public void receive(int byid, string msg)
{
Console.WriteLine($"收到:{byid}to{id}:{msg}");
}
public int getId()
{
return id;
}
}
}
英语
mediator
n. 调停者; 传递者; 中介物
concrete
adj. 混凝土的; 实在的,具体的; 有形的; vi. 凝结; vt. 使凝固; 用混凝土修筑;
colleague
n. 同事,同僚
中介者模式解析
本文介绍了一种设计模式——中介者模式,通过一个中介对象来封装一系列对象交互,降低对象间的耦合度,使得各对象可以独立改变其行为而不会影响到其他对象。文章通过具体的代码示例展示了如何在.NET环境下实现中介者模式。
1163

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



