Go和Java实现中介者模式

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

Go和Java实现中介者模式

下面通过一个同事之间相互通信的例子来说明中介者模式的使用。

1、中介者模式

中介者模式是用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,该类通常处理不同类之间的

通信,并支持松耦合,使代码易于维护。中介者模式属于行为型模式。

  • 意图:用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松

    散,而且可以独立地改变它们之间的交互。

  • 主要解决:对象与对象之间存在大量的关联关系,这样势必会导致系统的结构变得很复杂,同时若一个对象发

    生改变,我们也需要跟踪与之相关联的对象,同时做出相应的处理。

  • 何时使用:多个类相互耦合,形成了网状结构。

  • 如何解决:将上述网状结构分离为星型结构。

  • 关键代码:对象 Colleague 之间的通信封装到一个类中单独处理。

  • 应用实例:1、中国加入 WTO 之前是各个国家相互贸易,结构复杂,现在是各个国家通过 WTO 来互相贸易。

    2、机场调度系统。 3、MVC 框架,其中C(控制器)就是 M(模型)和 V(视图)的中介者。

  • 优点:1、降低了类的复杂度,将一对多转化成了一对一。 2、各个类之间的解耦。 3、符合迪米特原则。

  • 缺点:中介者会庞大,变得复杂难以维护。

  • 使用场景:1、系统中对象之间存在比较复杂的引用关系,导致它们之间的依赖关系结构混乱而且难以复用该

    对象。 2、想通过一个中间类来封装多个类中的行为,而又不想生成太多的子类。

  • 注意事项:不应当在职责混乱的时候使用。

  • 适用性:

    一组对象以定义良好但是复杂的方式进行通信,产生的相互依赖关系结构混乱且难以理解。

    一个对象引用其他很多对象并且直接与这些对象通信,导致难以复现该对象。

    想定制一个分布在多个类中的行为,而又不想生成太多的子类。文章来源地址https://www.toymoban.com/news/detail-653079.html

2、Go实现中介者模式

package mediator

// ========== Colleague同事类 ==========
type Colleague interface {
	Send(string)
	Notify(string)
}
package mediator

import "fmt"

// ========== ColleagueA同事类A ==========
type ColleagueA struct {
	Mediator
}

func (colleagueA *ColleagueA) Send(message string) {
	colleagueA.Mediator.Send(message, colleagueA)
}

func (colleagueA *ColleagueA) Notify(message string) {
	fmt.Println("同事A得到信息:" + message)
}
package mediator

import "fmt"

// ========== ColleagueB同事类B ==========
type ColleagueB struct {
	Mediator
}

func (colleagueB *ColleagueB) Send(message string) {
	colleagueB.Mediator.Send(message, colleagueB)

}

func (colleagueB *ColleagueB) Notify(message string) {
	fmt.Println("同事B得到信息:" + message)

}
package mediator

// ========== Mediator中介者类 ==========
type Mediator interface {
	Send(string, Colleague)
}
package com.mediator;

// ========== ConcreteMediator ==========
public class ConcreteMediator extends Mediator{

    private ColleagueA colleagueA;

    private ColleagueB colleagueB;

    public void setColleagueA(ColleagueA colleagueA) {
        this.colleagueA = colleagueA;
    }

    public void setColleagueB(ColleagueB colleagueB) {
        this.colleagueB = colleagueB;
    }

    @Override
    public void send(String message, Colleague colleague) {
        if (colleague == colleagueA){
            colleagueB.notify(message);
        }else{
            colleagueA.notify(message);
        }
    }
}
package main

import . "proj/mediator"

func main() {
	concreteMediator := ConcreteMediator{}
	colleagueA := ColleagueA{Mediator: &concreteMediator}
	colleagueB := ColleagueB{Mediator: &concreteMediator}
	concreteMediator.SetColleagueA(colleagueA)
	concreteMediator.SetColleagueB(colleagueB)
	colleagueA.Send("吃过饭了没?")
	colleagueB.Send("没有呢,你打算请客吗?")
}
# 程序输出
同事A得到信息:吃过饭了没?
同事A得到信息:没有呢,你打算请客吗?

3、Java实现中介者模式

package com.mediator;

// ========== Colleague同事类 ==========
public abstract class Colleague {
    protected Mediator mediator;
    public Colleague(Mediator mediator){
        this.mediator = mediator;
    }

    public void send(String message){
        this.mediator.send(message,this);
    }
    public abstract void notify(String message);
}
package com.mediator;

// ========== ColleagueA同事类A ==========
public class ColleagueA extends Colleague{
    public ColleagueA(Mediator mediator) {
        super(mediator);
    }

    @Override
    public void notify(String message){
        System.out.println("同事A得到信息:"+message);
    }
}
package com.mediator;

// ========== ColleagueB同事类B ==========
public class ColleagueB extends Colleague{
    public ColleagueB(Mediator mediator) {
        super(mediator);
    }

    @Override
    public void notify(String message){
        System.out.println("同事B得到信息:"+message);
    }
}
package com.mediator;

// ========== Mediator中介者类 ==========
public abstract  class Mediator {
    public abstract void send(String message,Colleague colleague);
}
package com.mediator;

// ========== ConcreteMediator ==========
public class ConcreteMediator extends Mediator{

    private ColleagueA colleagueA;

    private ColleagueB colleagueB;

    public void setColleagueA(ColleagueA colleagueA) {
        this.colleagueA = colleagueA;
    }

    public void setColleagueB(ColleagueB colleagueB) {
        this.colleagueB = colleagueB;
    }

    @Override
    public void send(String message, Colleague colleague) {
        if (colleague == colleagueA){
            colleagueB.notify(message);
        }else{
            colleagueA.notify(message);
        }
    }
}
package com.mediator;

public class Test {
    public static void main(String[] args) {
        ConcreteMediator concreteMediator = new ConcreteMediator();
        ColleagueA colleagueA = new ColleagueA(concreteMediator);
        ColleagueB colleagueB = new ColleagueB(concreteMediator);
        concreteMediator.setColleagueA(colleagueA);
        concreteMediator.setColleagueB(colleagueB);
        colleagueA.send("吃过饭了没?");
        colleagueB.send("没有呢,你打算请客吗?");
    }
}
# 程序输出
同事B得到信息:吃过饭了没?
同事A得到信息:没有呢,你打算请客吗?

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

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

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

相关文章

  • 设计模式-中介者模式在Java中使用示例-客户信息管理

    欲开发客户信息管理窗口界面,界面组件之间存在较为复杂的交互关系:如果删除一个客户, 要在客户列表(List)中删掉对应的项,客户选择组合框(ComboBox)中客户名称也将减少一个; 如果增加一个客户信息,客户列表中需增加一个客户,且组合框中也将增加一项。 如果在一个

    2024年02月15日
    浏览(38)
  • 设计模式之中介者模式(Mediator)的C++实现

    在软件组件开发过程中,如果存在多个对象,且这些对象之间存在的相互交互的情况不是一一对应的情况,这种功能组件间的对象引用关系比较复杂,耦合度较高。如果有一些新的需求变化,则不易扩展。中介者模式可以解决这种问题。中介者模式使用一个“中介对象”去管

    2024年02月12日
    浏览(34)
  • Go和Java实现中介者模式

    下面通过一个同事之间相互通信的例子来说明中介者模式的使用。 中介者模式是用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,该类通常处理不同类之间的 通信,并支持松耦合,使代码易于维护。中介者模式属于行为型模式。 意图:用一个中介对象

    2024年02月12日
    浏览(26)
  • 设计模式-中介者模式

    本文将详细介绍设计模式中的中介者模式,其中包括,中介者模式的优点、缺点、各组成部分。 中介者模式(Mediator Pattern)是一种设计模式,它定义了一个中介者类,该类将多个对象之间的通信抽象化,使得这些对象可以通过中介者进行通信,从而降低它们之间的直接耦合

    2024年02月09日
    浏览(36)
  • 设计模式——中介者模式

    中介者模式(Mediator Pattern)是一种行为型设计模式,它旨在减少多个对象之间的相互引用和耦合度。通过引入一个中介对象来封装一系列交互行为,使得原本复杂的网状关系结构转变为星形结构,所有对象与中介者通信而不是彼此直接通信。 抽象中介者(Mediator Interface):

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

    中介者模式:用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。 就好比世界各个国家之间可能会产生冲突,但是当产生冲突的时候需要联合国来解决冲突。每个国家之间的关系,就好

    2024年01月22日
    浏览(39)
  • 设计模式之中介者模式

    详细介绍         中介者模式(Mediator Pattern)是一种行为设计模式, 它通过定义一个中介类来封装多个对象之间的交互,使各对象不需要显示地相互引用,从而降低耦合度,提高系统的可维护性和灵活性。中介者模式将原本一对多的网状关系转变为一对多的关系,即每个

    2024年04月29日
    浏览(68)
  • 设计模式(十七)中介者

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

    2024年02月04日
    浏览(40)
  • 行为型设计模式——中介者模式

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

    2024年01月18日
    浏览(48)
  • 大话设计模式之中介者模式

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

    2024年04月16日
    浏览(43)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包