中介者模式

目前刚开始学习,感觉博大精深,下面狂妄的话还是别看了

中介者模式:当同事关系过多的时候,他们直接交互会引起混乱,我们使用一个中间人进行交互,他们之间的数据传递我们也封装起来:类图如下,这里面只提供一个例子,供大家学习,至于详细介绍的内容大家可以寻找我的板块:学习设计模式的传送门



using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MediatorPattern03_2 :MonoBehaviour{
    void Start()
    {
        MediatorConcrete_2 m = new MediatorConcrete_2();
        ComponentButton b = new ComponentButton(m);
        ComponentRemoveButton rb = new ComponentRemoveButton(m);
        ComponentList l = new ComponentList(m);
        ComponentSelect_2 cs = new ComponentSelect_2(m);
        //注册对象
        m.b = b;
        m.rb = rb;
        m.l = l;
        m.showList = cs;
        //开始使用
        b.Change();
        rb.Change();
        cs.Select("杨铁心");
        b.Change();

    }
}
public interface IMediator_2
{
    void CollegeChange(IComponent_2 c);
}
public class MediatorConcrete_2 : IMediator_2
{
    //持有四个同事类引用
    public ComponentButton b;
    public ComponentList l;
    public ComponentRemoveButton rb;
    public ComponentSelect_2 showList;
    public MediatorConcrete_2()
    {

    }
    public void CollegeChange(IComponent_2 c)
    {
        //如果按钮状态改变了
        if (c == b)
        {
            //添加角色
            l.AddRole(showList.CurrentRole);
            //更新显示
            l.Refresh();
        }
        if (c == rb)
        {

            l.RemoveRole(showList.CurrentRole);
            l.Refresh();
        }
        //如果点击了角色栏,则表明当前选择的角色
        if (c == showList)
        {
            showList.Select(showList.CurrentRole);
        }
    }
}
//抽象同事基类
public abstract class IComponent_2
{
    //持有中介者引用
    private IMediator_2 me;
    public IComponent_2(IMediator_2 me)
    {
        this.me = me;
    }
    //依赖的方法
    public virtual void Change() { me.CollegeChange(this); }
    //其他方法
    public virtual void Refresh() { }
    
}
public class ComponentButton : IComponent_2
{
    public ComponentButton(IMediator_2 me) : base(me) { }
    public override void Change()
    {
        Debug.Log("增加一位英雄");
        base.Change();
    }

}
public class ComponentRemoveButton : IComponent_2
{
    public ComponentRemoveButton(IMediator_2 me) : base(me)
    {
    }
    public override void Change()
    {
        Debug.Log("减少一位英雄");
        base.Change();
    }
}
public class ComponentList : IComponent_2
{
    private string[] m_roleArr = new string[] { "一叶春", "汪臧海" };
    private List
   
   
    
     m_roleList;
    public ComponentList(IMediator_2 me) : base(me)
    {
        m_roleList = new List
    
    
     
     (new string[] { "张无涯", "赵平生", "冰绥新" });
    }
    //自己的方法
    public void AddRole(string name)
    {
        m_roleList.Add(name);
        Debug.Log("已经增加了一位角色");
    }
    public void RemoveRole(string name)
    {
        m_roleList.Remove(name);
        Debug.Log("移除角色成功");
    }
    public override void Refresh()
    {

        Debug.Log("已经刷新List并重新显示");
        Debug.Log("当前角色为");
        foreach (var item in m_roleList)
        {
            Debug.Log(item);
        }
    }

}
public class ComponentSelect_2 : IComponent_2
{
    private string currentRole;
    public string CurrentRole { get { return currentRole; } }
    public ComponentSelect_2(IMediator_2 me) : base(me) { }
    public void Select(string name)
    {
        currentRole = name;
    }
    public override void Change()
    {
        Debug.Log("已选择" + currentRole);
        base.Change();
    }
}

    
    
   
   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值