admin管理员组文章数量:1621899
意图 | 用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。 |
适用性 |
|
案例:(几个人打牌 输赢的计算)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace dp_Mediator
{
public abstract class 抽象牌友
{
private int moneyCount=0;
public int MoneyCount { get; set; }
public abstract void ChangeCount(int count,抽象中介 mediator);
}
public class 牌友A : 抽象牌友
{
public override void ChangeCount(int count, 抽象中介 mediator)
{
mediator.AWin(count);
}
}
public class 牌友B : 抽象牌友
{
public override void ChangeCount(int count, 抽象中介 mediator)
{
mediator.BWin(count);
}
}
public abstract class 抽象中介
{
protected 抽象牌友 Aobj;
protected 抽象牌友 Bobj;
public 抽象中介(抽象牌友 Aobj, 抽象牌友 Bobj)
{
this.Aobj = Aobj;
this.Bobj = Bobj;
}
public int MoneyCount;
//abstract public void ChangeCount(int count,抽象牌友[] objs);
public abstract void AWin(int count);
public abstract void BWin(int count);
}
public class 具体中介 : 抽象中介
{
public 具体中介(抽象牌友 Aobj, 抽象牌友 Bobj) : base(Aobj, Bobj) { }
public override void AWin(int count)
{
Aobj.MoneyCount += count;
Bobj.MoneyCount -= count;
}
public override void BWin(int count)
{
Bobj.MoneyCount += count;
Aobj.MoneyCount -= count;
}
//public override void ChangeCount(int count, 抽象牌友[] objs)
//{
// //标识=字段 赢字段 true objs[i].winbool=true;
// //if (objs[i].winbool) objs[i].moneycount += count;
// //else
//}
}
public class Client
{
static void Main()
{
//创建所有玩家
抽象牌友 zs = new 牌友A();
抽象牌友 ls = new 牌友B();
//都要带钱
zs.MoneyCount = 20;
ls.MoneyCount = 20;
抽象中介 ww = new 具体中介(zs, ls);
ww.MoneyCount = 100;
Console.WriteLine("玩之前--------");
Console.WriteLine(zs.MoneyCount);
Console.WriteLine(ls.MoneyCount);
//zs赢了,大胡 5
zs.ChangeCount(5, ww);
Console.WriteLine("玩之后--------");
Console.WriteLine(zs.MoneyCount);
Console.WriteLine(ls.MoneyCount);
Console.ReadLine();
}
}
}
版权声明:本文标题:Unity学习笔记:设计模式-Mediator(中介) 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dianzi/1728852163a1176806.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论