什么浏览器可以看任何网站,网站建设 合作协议,网站规划与建设课程设计,便民网文章目录 1. 概述1.1 作用1.2 角色1.3 类图 2. 代码示例2.1 设计2.2 代码2.3 类图 1. 概述
仲裁者#xff08;Mediator#xff09;可以封装和协调多个对象之间的耦合交互行为#xff0c;以减弱这些对象之间的耦合关联。
1.1 作用
将多个对象相互耦合的设计转变为所有对象… 文章目录 1. 概述1.1 作用1.2 角色1.3 类图 2. 代码示例2.1 设计2.2 代码2.3 类图 1. 概述
仲裁者Mediator可以封装和协调多个对象之间的耦合交互行为以减弱这些对象之间的耦合关联。
1.1 作用
将多个对象相互耦合的设计转变为所有对象通过中介协作从而降低其耦合性 多个对象相互耦合 所有对象通过中介E相互协作 1.2 角色
抽象仲裁者Mediator角色封装和实现其子类的协作行为。 具体仲裁者ConcreteMediator角色实现仲裁者行为。 抽象协作者类Colleague角色持有指向仲裁者Mediator对象的引用 具体协作者ConcreteColleague
1.3 类图 #mermaid-svg-RD4ktl3MkbmpmcLg {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-RD4ktl3MkbmpmcLg .error-icon{fill:#552222;}#mermaid-svg-RD4ktl3MkbmpmcLg .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-RD4ktl3MkbmpmcLg .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-RD4ktl3MkbmpmcLg .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-RD4ktl3MkbmpmcLg .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-RD4ktl3MkbmpmcLg .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-RD4ktl3MkbmpmcLg .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-RD4ktl3MkbmpmcLg .marker{fill:#333333;stroke:#333333;}#mermaid-svg-RD4ktl3MkbmpmcLg .marker.cross{stroke:#333333;}#mermaid-svg-RD4ktl3MkbmpmcLg svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-RD4ktl3MkbmpmcLg g.classGroup text{fill:#9370DB;fill:#131300;stroke:none;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:10px;}#mermaid-svg-RD4ktl3MkbmpmcLg g.classGroup text .title{font-weight:bolder;}#mermaid-svg-RD4ktl3MkbmpmcLg .nodeLabel,#mermaid-svg-RD4ktl3MkbmpmcLg .edgeLabel{color:#131300;}#mermaid-svg-RD4ktl3MkbmpmcLg .edgeLabel .label rect{fill:#ECECFF;}#mermaid-svg-RD4ktl3MkbmpmcLg .label text{fill:#131300;}#mermaid-svg-RD4ktl3MkbmpmcLg .edgeLabel .label span{background:#ECECFF;}#mermaid-svg-RD4ktl3MkbmpmcLg .classTitle{font-weight:bolder;}#mermaid-svg-RD4ktl3MkbmpmcLg .node rect,#mermaid-svg-RD4ktl3MkbmpmcLg .node circle,#mermaid-svg-RD4ktl3MkbmpmcLg .node ellipse,#mermaid-svg-RD4ktl3MkbmpmcLg .node polygon,#mermaid-svg-RD4ktl3MkbmpmcLg .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-RD4ktl3MkbmpmcLg .divider{stroke:#9370DB;stroke:1;}#mermaid-svg-RD4ktl3MkbmpmcLg g.clickable{cursor:pointer;}#mermaid-svg-RD4ktl3MkbmpmcLg g.classGroup rect{fill:#ECECFF;stroke:#9370DB;}#mermaid-svg-RD4ktl3MkbmpmcLg g.classGroup line{stroke:#9370DB;stroke-width:1;}#mermaid-svg-RD4ktl3MkbmpmcLg .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5;}#mermaid-svg-RD4ktl3MkbmpmcLg .classLabel .label{fill:#9370DB;font-size:10px;}#mermaid-svg-RD4ktl3MkbmpmcLg .relation{stroke:#333333;stroke-width:1;fill:none;}#mermaid-svg-RD4ktl3MkbmpmcLg .dashed-line{stroke-dasharray:3;}#mermaid-svg-RD4ktl3MkbmpmcLg #compositionStart,#mermaid-svg-RD4ktl3MkbmpmcLg .composition{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-RD4ktl3MkbmpmcLg #compositionEnd,#mermaid-svg-RD4ktl3MkbmpmcLg .composition{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-RD4ktl3MkbmpmcLg #dependencyStart,#mermaid-svg-RD4ktl3MkbmpmcLg .dependency{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-RD4ktl3MkbmpmcLg #dependencyStart,#mermaid-svg-RD4ktl3MkbmpmcLg .dependency{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-RD4ktl3MkbmpmcLg #extensionStart,#mermaid-svg-RD4ktl3MkbmpmcLg .extension{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-RD4ktl3MkbmpmcLg #extensionEnd,#mermaid-svg-RD4ktl3MkbmpmcLg .extension{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-RD4ktl3MkbmpmcLg #aggregationStart,#mermaid-svg-RD4ktl3MkbmpmcLg .aggregation{fill:#ECECFF!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-RD4ktl3MkbmpmcLg #aggregationEnd,#mermaid-svg-RD4ktl3MkbmpmcLg .aggregation{fill:#ECECFF!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-RD4ktl3MkbmpmcLg .edgeTerminals{font-size:11px;}#mermaid-svg-RD4ktl3MkbmpmcLg :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} Mediator ConcreteMediator -ConcreteColleagueA:concreteColleagueA -ConcreteColleagueB:concreteColleagueB «interface» Colleague mediator:Mediator ConcreteColleagueA Mediator mediator ConcreteColleagueB Mediator mediator 2. 代码示例
2.1 设计
定义抽象仲裁者Mediator定义具体仲裁者ConcreteMediator 它依赖了需要的具体协作者ConcreteColleagueA、ConcreteColleagueB、ConcreteColleagueC它的Process()方法选择了如何执行何种实际协作者 定义了抽象协作者Colleague定义了各个实际协作者ConcreteColleagueA、ConcreteColleagueB、ConcreteColleagueC 它们实现了抽象协作者Colleague它们都依赖了抽象仲裁者Mediator它们的Action()方法通过所依赖的仲裁者执行对应的实际协作者的Option()方法它们的Option()方法是实际协作中的操作 调用 实例化一个具体仲裁者实例化三个具体协作者每个具体协作者关联仲裁者实例分别执行三个仲裁者的Action()方法完成每一次协作
2.2 代码
代码
package mainimport fmt// 抽象中介
type Mediator interface {Process(colleague Colleague)
}// 实际中介它持有所有具体协作者
type ConcreteMediator struct {concreteColleagueA *ConcreteColleagueAconcreteColleagueB *ConcreteColleagueBconcreteColleagueC *ConcreteColleagueC
}// 该方法实现了各协作者之间通过实际中介的相互协作该例中实际中介同时维护了实际协作者的协作关系
func (cm *ConcreteMediator) Process(colleague Colleague) {switch {case colleague cm.concreteColleagueA:cm.concreteColleagueA.Option()cm.concreteColleagueC.Option()case colleague cm.concreteColleagueB:cm.concreteColleagueB.Option()cm.concreteColleagueC.Option()case colleague cm.concreteColleagueC:cm.concreteColleagueC.Option()}
}// 抽象协作者
type Colleague interface {Action()
}// 定义实际协作者A它关联了中介
type ConcreteColleagueA struct {mediator Mediator
}// 该方法调用中介已达到调用其他协作者的目的调用顺序由中介维护
func (a *ConcreteColleagueA) Action() {a.mediator.Process(a)
}// 该方法是协作者A自身的操作
func (e *ConcreteColleagueA) Option() {fmt.Println(ConcreteColleagueA)
}// 实际协作者B(说明同协作者A)
type ConcreteColleagueB struct {mediator Mediator
}func (e *ConcreteColleagueB) Action() {e.mediator.Process(e)
}func (e *ConcreteColleagueB) Option() {fmt.Println(ConcreteColleagueB)
}// 实际协作者C(说明同协作者A)
type ConcreteColleagueC struct {mediator Mediator
}func (t *ConcreteColleagueC) Action() {t.mediator.Process(t)
}func (t *ConcreteColleagueC) Option() {fmt.Println(ConcreteColleagueC)
}func main() {//实例化一个具体中介concreteMediator : ConcreteMediator{}//实例化三个实际协作者concreteColleagueA : ConcreteColleagueA{mediator: concreteMediator,}concreteColleagueB : ConcreteColleagueB{mediator: concreteMediator,}concreteColleagueC : ConcreteColleagueC{mediator: concreteMediator,}//具体中介应持有所有协作者concreteMediator.concreteColleagueA concreteColleagueAconcreteMediator.concreteColleagueB concreteColleagueBconcreteMediator.concreteColleagueC concreteColleagueC//协作者A的Action()方法向它的实际中介请求并由中介按它维护的顺序依次调用协作者concreteColleagueA.Action()//协作者A的Action()方法向它的实际中介请求并由中介按它维护的顺序依次调用协作者concreteColleagueB.Action()//协作者A的Action()方法向它的实际中介请求并由中介按它维护的顺序依次调用协作者concreteColleagueC.Action()
}输出
2.3 类图 #mermaid-svg-rrcIEerO8Uhs3bza {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-rrcIEerO8Uhs3bza .error-icon{fill:#552222;}#mermaid-svg-rrcIEerO8Uhs3bza .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-rrcIEerO8Uhs3bza .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-rrcIEerO8Uhs3bza .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-rrcIEerO8Uhs3bza .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-rrcIEerO8Uhs3bza .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-rrcIEerO8Uhs3bza .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-rrcIEerO8Uhs3bza .marker{fill:#333333;stroke:#333333;}#mermaid-svg-rrcIEerO8Uhs3bza .marker.cross{stroke:#333333;}#mermaid-svg-rrcIEerO8Uhs3bza svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-rrcIEerO8Uhs3bza g.classGroup text{fill:#9370DB;fill:#131300;stroke:none;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:10px;}#mermaid-svg-rrcIEerO8Uhs3bza g.classGroup text .title{font-weight:bolder;}#mermaid-svg-rrcIEerO8Uhs3bza .nodeLabel,#mermaid-svg-rrcIEerO8Uhs3bza .edgeLabel{color:#131300;}#mermaid-svg-rrcIEerO8Uhs3bza .edgeLabel .label rect{fill:#ECECFF;}#mermaid-svg-rrcIEerO8Uhs3bza .label text{fill:#131300;}#mermaid-svg-rrcIEerO8Uhs3bza .edgeLabel .label span{background:#ECECFF;}#mermaid-svg-rrcIEerO8Uhs3bza .classTitle{font-weight:bolder;}#mermaid-svg-rrcIEerO8Uhs3bza .node rect,#mermaid-svg-rrcIEerO8Uhs3bza .node circle,#mermaid-svg-rrcIEerO8Uhs3bza .node ellipse,#mermaid-svg-rrcIEerO8Uhs3bza .node polygon,#mermaid-svg-rrcIEerO8Uhs3bza .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-rrcIEerO8Uhs3bza .divider{stroke:#9370DB;stroke:1;}#mermaid-svg-rrcIEerO8Uhs3bza g.clickable{cursor:pointer;}#mermaid-svg-rrcIEerO8Uhs3bza g.classGroup rect{fill:#ECECFF;stroke:#9370DB;}#mermaid-svg-rrcIEerO8Uhs3bza g.classGroup line{stroke:#9370DB;stroke-width:1;}#mermaid-svg-rrcIEerO8Uhs3bza .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5;}#mermaid-svg-rrcIEerO8Uhs3bza .classLabel .label{fill:#9370DB;font-size:10px;}#mermaid-svg-rrcIEerO8Uhs3bza .relation{stroke:#333333;stroke-width:1;fill:none;}#mermaid-svg-rrcIEerO8Uhs3bza .dashed-line{stroke-dasharray:3;}#mermaid-svg-rrcIEerO8Uhs3bza #compositionStart,#mermaid-svg-rrcIEerO8Uhs3bza .composition{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-rrcIEerO8Uhs3bza #compositionEnd,#mermaid-svg-rrcIEerO8Uhs3bza .composition{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-rrcIEerO8Uhs3bza #dependencyStart,#mermaid-svg-rrcIEerO8Uhs3bza .dependency{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-rrcIEerO8Uhs3bza #dependencyStart,#mermaid-svg-rrcIEerO8Uhs3bza .dependency{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-rrcIEerO8Uhs3bza #extensionStart,#mermaid-svg-rrcIEerO8Uhs3bza .extension{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-rrcIEerO8Uhs3bza #extensionEnd,#mermaid-svg-rrcIEerO8Uhs3bza .extension{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-rrcIEerO8Uhs3bza #aggregationStart,#mermaid-svg-rrcIEerO8Uhs3bza .aggregation{fill:#ECECFF!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-rrcIEerO8Uhs3bza #aggregationEnd,#mermaid-svg-rrcIEerO8Uhs3bza .aggregation{fill:#ECECFF!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-rrcIEerO8Uhs3bza .edgeTerminals{font-size:11px;}#mermaid-svg-rrcIEerO8Uhs3bza :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} «interface» Mediator Process(colleague Colleague) ConcreteMediator ConcreteColleagueA:concreteColleagueA ConcreteColleagueB:concreteColleagueB ConcreteColleagueC:concreteColleagueC Process(colleague Colleague) «interface» Colleague Action() ConcreteColleagueA Mediator mediator Action() Option() ConcreteColleagueB Mediator mediator Action() Option() ConcreteColleagueC Mediator mediator Action() Option()