Golang设计模式——12中介模式

简介: Golang设计模式——12中介模式

中介模式

定义

用一个中介者对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而使耦合松散,而且可以独立地改变它们之间的交互。

优点

  1. 适当地使用中介者模式可以避免同事类之间的过度耦合,使得各同事类之间可以相对独立地使用。
  2. 使用中介者模式可以将对象间一对多的关联转变为一对一的关联,使对象间的关系易于理解和维护。
  3. 使用中介者模式可以将对象的行为和协作进行抽象,能够比较灵活的处理对象间的相互作用。

缺点

  1. 由于中介者承担了较多的责任,所以当中介者被破坏后,各个系统将可能受到影响

场景

一般应用于一组对象以定义良好但是复杂的方式进行通信的场合

代码

package Mediator
import "fmt"
type Colleague interface {
  Send(msg string)
  Notify(msg string)
  SetMediator(mediator Mediator)
}
type ConcreteColleague1 struct {
  mediator Mediator
}
func (c *ConcreteColleague1) SetMediator(mediator Mediator) {
  c.mediator = mediator
}
func (c *ConcreteColleague1) Send(msg string) {
  c.mediator.Send(msg, c)
}
func (c *ConcreteColleague1) Notify(msg string) {
  fmt.Println("ConcreteColleague1 recv msg:", msg)
}
type ConcreteColleague2 struct {
  mediator Mediator
}
func (c *ConcreteColleague2) SetMediator(mediator Mediator) {
  c.mediator = mediator
}
func (c *ConcreteColleague2) Send(msg string) {
  c.mediator.Send(msg, c)
}
func (c *ConcreteColleague2) Notify(msg string) {
  fmt.Println("ConcreteColleague2 recv msg:", msg)
}
type Mediator interface {
  Send(msg string, colleague Colleague)
}
type ConcreteMediator struct {
  c1 Colleague
  c2 Colleague
}
func (c *ConcreteMediator) Send(msg string, colleague Colleague) {
  if colleague == c.c1 {
    c.c2.Notify(msg)
  } else {
    c.c1.Notify(msg)
  }
}
package Mediator
import "testing"
func TestConcreteMediator_Send(t *testing.T) {
  concreteMediator := &ConcreteMediator{}
  c1 := &ConcreteColleague1{}
  c2 := &ConcreteColleague2{}
  c1.SetMediator(concreteMediator)
  c2.SetMediator(concreteMediator)
  concreteMediator.c1 = c1
  concreteMediator.c2 = c2
  c1.Send("吃饭了吗c2")
  c2.Send("我吃过了c1")
}

其他设计模式

设计模式Git源代码

00简单工厂模式

01工厂方法模式

02抽象工厂模式

03外观模式

04建造者模式

05桥接模式

06命令模式

07迭代器模式

08模板模式

09访问者模式

10备忘录模式

11责任链模式

12中介模式

13原型模式

14状态模式

15策略模式

16享元模式

17组合模式

18解释器模式

19单例模式

20适配器模式

21代理模式

22装饰器模式

23观察者模式


目录
相关文章
|
20天前
|
设计模式 SQL 算法
设计模式了解哪些,模版模式
设计模式了解哪些,模版模式
21 0
|
1月前
|
设计模式 Java uml
C++设计模式之 依赖注入模式探索
C++设计模式之 依赖注入模式探索
37 0
|
3月前
|
设计模式 存储 算法
Java 设计模式最佳实践:三、行为模式
Java 设计模式最佳实践:三、行为模式
22 0
|
2月前
|
设计模式 前端开发 JavaScript
观察者模式 vs 发布-订阅模式:两种设计模式的对决!
欢迎来到前端入门之旅!这个专栏是为那些对Web开发感兴趣、刚刚开始学习前端的读者们打造的。无论你是初学者还是有一些基础的开发者,我们都会在这里为你提供一个系统而又亲切的学习平台。我们以问答形式更新,为大家呈现精选的前端知识点和最佳实践。通过深入浅出的解释概念,并提供实际案例和练习,让你逐步建立起一个扎实的基础。无论是HTML、CSS、JavaScript还是最新的前端框架和工具,我们都将为你提供丰富的内容和实用技巧,帮助你更好地理解并运用前端开发中的各种技术。
|
16天前
|
设计模式 Java 数据库
小谈设计模式(2)—简单工厂模式
小谈设计模式(2)—简单工厂模式
|
3月前
|
物联网 Go 网络性能优化
使用Go语言(Golang)可以实现MQTT协议的点对点(P2P)消息发送。MQTT协议本身支持多种消息收发模式
使用Go语言(Golang)可以实现MQTT协议的点对点(P2P)消息发送。MQTT协议本身支持多种消息收发模式【1月更文挑战第21天】【1月更文挑战第104篇】
102 1
|
1天前
|
设计模式 消息中间件 Java
Java 设计模式:探索发布-订阅模式的原理与应用
【4月更文挑战第27天】发布-订阅模式是一种消息传递范式,被广泛用于构建松散耦合的系统。在 Java 中,这种模式允许多个对象监听和响应感兴趣的事件。
8 2
|
4天前
|
设计模式 存储 JavaScript
[设计模式Java实现附plantuml源码~创建型] 多态工厂的实现——工厂方法模式
[设计模式Java实现附plantuml源码~创建型] 多态工厂的实现——工厂方法模式
|
4天前
|
设计模式 Java Go
[设计模式Java实现附plantuml源码~创建型] 集中式工厂的实现~简单工厂模式
[设计模式Java实现附plantuml源码~创建型] 集中式工厂的实现~简单工厂模式
|
6天前
|
设计模式
设计模式(一)简单工厂模式
设计模式(一)简单工厂模式
13 0