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.中介者模式的主要内容,如果未能解决你的问题,请参考以下文章

Python 设计模式 — 行为型模式 — 中介者模式

Python 设计模式 — 行为型模式 — 中介者模式

设计模式——行为型模式之中介者模式

设计模式(30)-----行为型模式-----中介者设计模式

设计模式 行为型模式 实例 -- 中介者模式实例:一对多聊天

行为篇-中介者模式