c#设计模式-行为性模式-6.中介者模式

  • List item

中介者模式,定义了一个中介对象来封装一系列对象之间的交互关系,中介者使各个对象之间不需要显式地相互引用,从而降低耦合

简单记忆:一对多变成一对一

比如:

这时是赢家找输家要钱 赢家a和输家b是直接通信的。当玩家比较多的时候,例如a赢了,bcde四个玩家都会输5元,那么a就要和bcde玩家都要通信。如果我们引入一个中间人来负责统一结算,赢家就可以直接找中间人结算,不必直接找所有的输家要账了
图:
c#设计模式-行为性模式-6.中介者模式_第1张图片

用到的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#)