设计模式(十七)中介者

这篇具有很好参考价值的文章主要介绍了设计模式(十七)中介者。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、定义

义一个对象来封装一系列的对象交互。中介者模式使各对象不需要显示地相互引用,从而使其耦合松散,而且可以让你相对独立地改变它们之间的交互。中介者模式又称为调停模式,它是一种对象说行为型模式。

二、描述

在中介者模式中,引入了用于协调其他对象/类之间的相互调用的中介者类,为了让系统具有更好的灵活性和可扩展性,通常还提供了抽象中介者,包含以下四个角色:设计模式(十七)中介者1、Mediator(抽象中介者):它定义了一个接口,该接口用于与各同事对象之间进行通信。
2、ConcreteMediator(具体中介者):它是抽象中介者的子类,通过协调各个同事对象来实现协作行为,维持了各个同事对象的引用。
3、Colleague(抽象同事类):它定义了各个同事类公有的方法,并声明了一些抽象方法来供子类实现,同时维持了一个对抽象中介者类的引用,其子类可以通过该引用来与中介者通信。
4、ConcreteColleague(具体同事类):它是抽象同事类的子类,每一个同事对象需要和其他对象通信时,先与中介者对象通信,通过中介者来间接完成与其他同事类的通信,在具体同事类中实现了在抽象同事类中声明的抽象方法。

三、例子

X公司欲开发一套CRM系统,其中包含一个客户信息管理模块,界面包含了按钮、文本框、列表框、下拉框等多个组件,增加或删除一个客户,各组件均会发生联动效果,较为复杂。
设计模式(十七)中介者Mediator:抽象中介者

public abstract class Mediator
{
    public abstract void ComponenetChanged(Component c);
}

ConcreteMediator:具体中介者

public class ConcreteMediator : Mediator
{
    // 维持对各个同事对象的引用
    public Button addButton;
    public List list;
    public TextBox userNameTextBox;
    public ComboBox cb;

    // 封装同事对象之间的交互
    public override void ComponenetChanged(Component c)
    {
        // 单击按钮
        if (c == addButton)
        {
            Console.WriteLine("-- 单击增加按钮 --");
            list.Update();
            cb.Update();
            userNameTextBox.Update();
        }
        // 从列表框选择客户
        else if (c == list)
        {
            Console.WriteLine("-- 从列表框选择客户 --");
            cb.Select();
            userNameTextBox.SetText();
        }
        // 从组合框选择客户
        else if (c == cb)
        {
            Console.WriteLine("-- 从组合框选择客户 --");
            cb.Select();
            userNameTextBox.SetText();
        }
    }
}

Component:抽象组件,充当抽象同事类(Colleague)

public abstract class Component
{
    protected Mediator mediator;

    public void SetMediator(Mediator mediator)
    {
        this.mediator = mediator;
    }

    // 转发调用
    public void Changed()
    {
        mediator.ComponenetChanged(this);
    }

    public abstract void Update();
}

Button、List、ComboBox、TextBox:按钮、列表框、组合框、文本框,具体组件,充当具体同事类(ConcreteColleague)

public class Button : Component
{
    public override void Update()
    {
        // 按钮不产生响应
    }
}

public class List : Component
{
    public override void Update()
    {
        Console.WriteLine("列表框增加一项:张无忌");
    }

    public void Select()
    {
        Console.WriteLine("列表框选中项:小龙女");
    }
}

public class ComboBox : Component
{
    public override void Update()
    {
        Console.WriteLine("组合框增加一项:张无忌");
    }

    public void Select()
    {
        Console.WriteLine("组合框选中项:小龙女");
    }
}

public class TextBox : Component
{
    public override void Update()
    {
        Console.WriteLine("客户信息增加成功后文本框清空");
    }

    public void SetText()
    {
        Console.WriteLine("文本框显示:小龙女");
    }
}

Program:客户端测试类

// Step1.定义中介者对象
ConcreteMediator mediator = new ConcreteMediator();

// Step2.定义同事对象
Button addButton = new Button();
List list = new List();
ComboBox cb = new ComboBox();
TextBox userNameTextBox = new TextBox();

addButton.SetMediator(mediator);
list.SetMediator(mediator);
cb.SetMediator(mediator);
userNameTextBox.SetMediator(mediator);

mediator.addButton = addButton;
mediator.list = list;
mediator.cb = cb;
mediator.userNameTextBox = userNameTextBox;

// Step3.点击增加按钮
addButton.Changed();

Console.WriteLine("---------------------------------------------");

// Step4.从列表框选择客户
list.Changed();
Console.ReadLine();

设计模式(十七)中介者

四、总结

1、优点

(1)中介者模式简化了对象之间的交互,它用中介者和同事的一对多交互代替了原来同事之间的多对多交互,一对多关系更容易理解、维护和扩展,将原本难以理解的网状结构转换成相对简单的星形结构。
(2)可将各同事对象解耦,中介者模式有利于各同事之间的松耦合,可以独立地改变和复用每一个同事和中介者,增加新的中介者类和新的同事类都比较方便,更好地符合开闭原则。
(3)可以减少子类的生成,中介者模式将原本分布于多个对象间的行为集中在一起,改变这些行为只需生成新的中介者子类即可,这使得各个同事类可被重用,无须直接对同事类进行扩展。

2、缺点

(1)具体中介者子类中包含了大量的同事之间的交互细节,可能会导致具体中介者类非常复杂,使得系统难以维护。文章来源地址https://www.toymoban.com/news/detail-760105.html

到了这里,关于设计模式(十七)中介者的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

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

    中介者模式主要是将关联关系由一个中介者类统一管理维护,一般来说,同事类之间的关系是比较复杂的,多个同事类之间互相关联时,他们之间的关系会呈现为复杂的网状结构,这是一种过度耦合的架构,即不利于类的复用,也不稳定。例如在下左图中,有六个同事类对象

    2024年01月18日
    浏览(47)
  • 设计模式- 中介者模式(Mediator)

    中介者模式(Mediator Pattern),是一种对象行为型模式。该模式的主要目的是定义一个中介对象来封装一系列对象之间的交互,使原有对象之间的耦合变得松散,并且可以独立地改变它们之间的交互。 抽象中介者(Mediator) :这是中介者模式的核心接口,它定义了同事对象注

    2024年04月26日
    浏览(36)
  • 大话设计模式之中介者模式

    中介者模式是一种行为型设计模式,它通过引入一个中介者对象来封装一系列对象之间的交互,从而减少对象之间的直接通信,使得对象之间的耦合度降低,同时提高了系统的可维护性和灵活性。 在中介者模式中,对象之间的通信不再直接发生,而是通过中介者对象来进行。

    2024年04月16日
    浏览(43)
  • Java设计模式-中介者模式

    中介者模式,就是用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地互相引用,从而使其耦合松散,而且可以独立的改变它们之间的交互。 其实中介者模式很简单的,就像它的名字一样,中介,调用某个类的某些方法的时候,我们不直接去跟那个类的实

    2024年02月15日
    浏览(41)
  • 《设计模式的艺术》笔记 - 中介者模式

            中介者模式用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。中介者模式又称为调停者模式,它是一种对象行为模式。 myclass.h myclass.cpp main.cpp         1. 中介者模式简化了

    2024年01月24日
    浏览(46)
  • 经典的设计模式17——中介者模式

    定义: 用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变他们之间的交互。 结构: 抽象中介者角色:是中介者的接口,提供了同事对象注册与转发同事对象信息的抽象方法。 具体中介者角色:实现中

    2024年02月09日
    浏览(41)
  • C++ 设计模式之 中介者模式

    【声明】本题目来源于卡码网(题目页面 (kamacoder.com)) 【提示:如果不想看文字介绍,可以直接跳转到C++编码部分】         -- 什么是中介者模式  (第16种模式)          中介者模式 (Mediator Pattern)也被称为 调停者模式 ,是⼀种 ⾏为型设计模式 ,它通过⼀个中介

    2024年01月19日
    浏览(37)
  • 设计模式—行为型模式之中介者模式

    中介者模式(Mediator Pattern):用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,减少对象间混乱的依赖关系,从而使其耦合松散,而且可以独立地改变它们之间的交互。对象行为型模式。 包含以下角色: Mediator: 抽象中介者 ConcreteMediator: 具体中

    2024年01月16日
    浏览(46)
  • 设计模式-行为型模式之中介者模式

    在用户与用户直接聊天的设计方案中,用户对象之间存在很强的 关联性 ,将导致系统出现如下问题: 对象之间存在大量的相互关联和调用,若有一个对象发生变化,则需要跟踪和该对象关联的其他所有对象,并进行适当处理。 由于一个对象和其他对象具有很强的关联,若没

    2023年04月23日
    浏览(34)
  • Java中介者设计模式

    中介者模式(Mediator Pattern)是一种行为设计模式,它通过封装一系列对象之间的交互,将对象之间的通信集中处理,从而降低对象之间的耦合度。 在中介者模式中,一个中介者对象封装了一系列对象之间的交互关系。中介者使各个对象不需要显式地相互引用,从而使其耦合

    2024年02月16日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包