设计模式-》中介者模式
例子
打牌(斗地主规则) 初始钱50 赢牌对面扣钱 地主赢扣20(地主40块) 农民赢扣20(农民一人10块)
public abstract class AbsMediator
{
public abstract void Register(Person obj);
/// <summary>
/// 赢牌
/// </summary>
/// <param name="obj"></param>
public abstract void HuCard(Person obj);
}
public abstract class Person
{
protected AbsMediator AbsMediator { get; set; }
public Person(string name, PersonType personType)
{
Name = name;
PersonType = personType;
Money = 100;
}
public void SetMediator(AbsMediator mediator)
{
AbsMediator = mediator;
}
public string Name { get; }
public PersonType PersonType { get; }
public int Money { get; set; }
public void HuCard()
{
AbsMediator.HuCard(this);
}
public abstract void ReceiveHuCard(Person person);
protected void AddQian(Person huPerson)
{
if (huPerson.PersonType == PersonType)
{
if (PersonType == PersonType.农民)
{
Money += 10;
}
else if (PersonType == PersonType.地主)
{
Money += 40;
}
}
}
protected void KouQian(Person huPerson)
{
if (huPerson.PersonType == PersonType.农民)
{
Money -= 20;
}
else if (huPerson.PersonType == PersonType.地主)
{
Money -= 20;
}
}
}
public enum PersonType
{
地主 = 0,
农民 = 1
}
public class NoMingPerson : Person
{
public NoMingPerson(string name) : base(name, PersonType.农民)
{
}
public override void ReceiveHuCard(Person person)
{
AddQian(person);
if (person.PersonType != PersonType.农民)
{
KouQian(person);
Console.WriteLine("地主赢啦,农民扣钱------还剩" + Money + this.Name);
}
}
}
public class DizhuPerson : Person
{
public DizhuPerson(string name) : base(name, PersonType.地主)
{
}
public override void ReceiveHuCard(Person person)
{
AddQian(person);
if (person.PersonType != PersonType.地主)
{
KouQian(person);
Console.WriteLine("农民赢啦,地主扣钱------还剩" + Money + this.Name);
}
}
}
public class DouDiZhuMediator : AbsMediator
{
private List<Person> colleagues = new List<Person>();
public override void Register(Person obj)
{
if (!this.colleagues.Contains(obj))
{
this.colleagues.Add(obj);
obj.SetMediator(this);
}
}
public override void HuCard(Person obj)
{
foreach (var item in this.colleagues)
{
item.ReceiveHuCard(obj);
}
}
}
class Program
{
static void Main(string[] args)
{
DizhuTest();
// NongmingTest();
}
private static void NongmingTest()
{
var doudizhu = new DouDiZhuMediator();
var dizhu = new DizhuPerson("地主");
var nongminga = new NoMingPerson("A农民");
var nongmingb = new NoMingPerson("B农民");
doudizhu.Register(dizhu);
doudizhu.Register(nongminga);
doudizhu.Register(nongmingb);
nongminga.HuCard();
Console.WriteLine(nongminga.Money + "," + nongmingb.Money);
}
private static void DizhuTest()
{
var doudizhu = new DouDiZhuMediator();
var dizhu = new DizhuPerson("地主");
var nongminga = new NoMingPerson("A农民");
var nongmingb = new NoMingPerson("B农民");
doudizhu.Register(dizhu);
doudizhu.Register(nongminga);
doudizhu.Register(nongmingb);
dizhu.HuCard();
Console.WriteLine(dizhu.Money);
}
}
__EOF__

本文作者:icxldd
本文链接:https://www.cnblogs.com/icxldd/p/15804681.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/icxldd/p/15804681.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现