设计模式这样玩泰简单(Golang版)-中介模式

Posted hello_读书就是赚钱

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式这样玩泰简单(Golang版)-中介模式相关的知识,希望对你有一定的参考价值。

场景

老板:如果我们现在要实现一个群通知功能,群中的所有成员都能通知其他人,你觉得用什么设计模式比较好
你:好的老板,那就使用中介模式

方案

在这里插入图片描述
中介模式,指的是用一个对象来封装一批成员对象,并暴露同一的接口,这个接口可以对这些成员对象施加一些动作.就如它的名称一样,像一个中介代理着他的成员对象去做一些事情,当然了,真正动手的是被他代理的实例.
在这个场景中,我们用中介模式来代理被代理实例的功能,我们建立一个中间者,然后向中介者发一起一起群通知,然后中介者帮我们向所有注册的成员发起通知,这样就可以完成我们期望的功能.
与中介者模式比较相似的是代理模式,之前我们讲过代理模式主要的作用是为了给成员对象增强一些功能,虽然中介者模式也可以做到,但是中介者想解决的是把复杂的图关系理成单一的1对多关系,以中介者为中心,减少复杂度.

实现

see:https://github.com/jjtHappy/design-pattern-so-simple

package main

import "fmt"

type Mediator interface{
	Notify()
	Register(*Member)
}

type MediatorImpl struct {
	members []*Member
}

func (m *MediatorImpl) Notify(){
	for _,m:=range m.members{
		m.Notify()
	}
}

func (m *MediatorImpl) Register(member *Member) {
		m.members =append(m.members,member)
}

type  Member struct {
	Name string
}

func (m *Member) Notify()  {
	fmt.Println(m.Name+"收到通知")
}

func main(){
	mediator:=&MediatorImpl{}
	mediator.Register(&Member{
		Name: "成员1",
	})
	mediator.Register(&Member{
		Name: "成员2",
	})
	mediator.Register(&Member{
		Name: "成员3",
	})
	mediator.Notify()
}

以上是关于设计模式这样玩泰简单(Golang版)-中介模式的主要内容,如果未能解决你的问题,请参考以下文章

设计模式这样玩泰简单(Golang版)-外观模式

设计模式这样玩泰简单(Golang版)-策略模式

设计模式这样玩泰简单(Golang版)-命令模式

设计模式这样玩泰简单(Golang版)-命令模式

设计模式这样玩泰简单(Golang版)-装饰者模式

设计模式这样玩泰简单(Golang版)-状态模式