c#设计模式-行为性模式-6.中介者模式
Posted mr.chenyuelin
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c#设计模式-行为性模式-6.中介者模式相关的知识,希望对你有一定的参考价值。
- List item
中介者模式,定义了一个中介对象来封装一系列对象之间的交互关系,中介者使各个对象之间不需要显式地相互引用,从而降低耦合
简单记忆:一对多变成一对一
比如:
这时是赢家找输家要钱 赢家a和输家b是直接通信的。当玩家比较多的时候,例如a赢了,bcde四个玩家都会输5元,那么a就要和bcde玩家都要通信。如果我们引入一个中间人来负责统一结算,赢家就可以直接找中间人结算,不必直接找所有的输家要账了
图:
用到的c#知识”
1.当父类为抽象类时,子类构造函数必须要调用父类构造函数以完成父类初始化
2.构造函数也可以在主程序中初始化,当初始化的东西比较简单时
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 中介者模式
{
//抽象玩家类
public abstract class AbstractPlayer
{
public int MoneyCount { get; set; }
public AbstractPlayer()
{
this.MoneyCount = 0;
}
public abstract void ChangeCount(int count, AbstractMediator mediator);
}
//玩家A
public class PlayerA : AbstractPlayer
{
public override void ChangeCount(int count, AbstractMediator mediator)
{
mediator.AWin(count);
}
}
//玩家B
public class PlayerB : AbstractPlayer
{
public override void ChangeCount(int count, AbstractMediator mediator)
{
mediator.BWin(count);
}
}
//抽象中介者
public abstract class AbstractMediator
{
public AbstractPlayer A;
public AbstractPlayer B;
public AbstractMediator(AbstractPlayer a,AbstractPlayer b)
{
A = a;
B = b;
}
public abstract void AWin(int count);
public abstract void BWin(int count);
}
//具体中介者
public class Mediator : AbstractMediator
{
public Mediator(AbstractPlayer a,AbstractPlayer b) : base(a, b) { }
public override void AWin(int count)
{
A.MoneyCount += count;
B.MoneyCount -= count;
}
public override void BWin(int count)
{
A.MoneyCount -= count;
B.MoneyCount += count;
}
}
class Program
{
static void Main(string[] args)
{
//这个写法是子类构造函数写在主程序里初始化
AbstractPlayer a = new PlayerA() { MoneyCount = 20 };
AbstractPlayer b = new PlayerB() { MoneyCount = 20 };
AbstractMediator mediator = new Mediator(a, b);
Console.WriteLine("a赢b5元");
a.ChangeCount(5, mediator);
Console.WriteLine($"a还剩{a.MoneyCount}元");
Console.WriteLine($"b还剩{b.MoneyCount}元");
}
}
}
a赢b5元
a还剩25元
b还剩15元
中介者模式优点:
1 降低了同事类交互的复杂度,将一对多转化成了一对一;
2 各个类之间的解耦;
3 符合迪米特原则。
中介者模式缺点:
1 业务复杂时中介者类会变得复杂难以维护。
转载:https://www.cnblogs.com/wyy1234/p/10099216.html
以上是关于c#设计模式-行为性模式-6.中介者模式的主要内容,如果未能解决你的问题,请参考以下文章
设计模式(30)-----行为型模式-----中介者设计模式