跟我一起学“仓颉”设计模式-中介者模式
本章为大家详细的介绍了仓颉设计模式中中介者模式的内容。
·
目录
一、中介者模式
中介者模式:定义一个对象来封装一系列对象的交互。中介者模式使各对象之间不需要显示地相互引用,从而使其耦合松散,而用户可以独立地改变它们之间地交互(行为型)。
中介者角色:
- 抽象中介者:定义一个接口,用于与各个同事对象之间进行通信;
- 具体中介者:协调各个同事对象来实现协作行为,维持了对各个同时对象地引用;
- 抽象同事类:定义各个同事类共有地方法,维持一个抽象中介者类地引用;
- 具体同事类:每一个同事类对象在需要和其他同事对象通信时先于中介者通信,通过中介者间接与其他同事类地通信。
二、实现
在src目录下,新建一个mediator文件夹,在该文件夹下新建一个mediator.cj文件和mediator.drawio文件。
类图

核心代码
package DesignPattern.mediator
// 抽象中介者
public abstract class Mediator {
public func buildingShow(building: Building): Unit
}
// 抽象同事类
public abstract class Building {
public Building(let mediator: Mediator) {}
public func show() {
this.mediator.buildingShow(this)
}
public func getInfo(): Unit
}
// 具体同事类
public class TCYP <: Building {
public TCYP(mediator: Mediator) {
super(mediator)
}
public override func getInfo() {
println("汤臣一品位于上海市浦东新区花园路")
}
}
public class FDHY <: Building {
public FDHY(mediator: Mediator) {
super(mediator)
}
public override func getInfo() {
println("翻斗花园位于翻斗大街")
}
}
// 具体中介者
public class ConcreteMediator <: Mediator {
public var tcyp = Option<TCYP>.None
public var fdhy = Option<FDHY>.None
public override func buildingShow(building: Building) {
if (building is TCYP) {
tcyp.getOrThrow().getInfo()
} else if (building is FDHY) {
fdhy.getOrThrow().getInfo()
}
}
}
测试代码
package DesignPattern
import DesignPattern.mediator.*
main(): Int64 {
// 定义中介
let mediator = ConcreteMediator()
// 定义房源
let tcyp = TCYP(mediator)
let fdhy = FDHY(mediator)
mediator.tcyp = tcyp
mediator.fdhy = fdhy
tcyp.show()
fdhy.show()
return 0
}
三、优缺点
优点:
- 中介者模式简化了对象之间地交互,用中介者和同事一对多交互代替了同事之间的多对多交互;
- 可以减少子类生成,中介者将原本分布多个对象间的行为集中一起,改变这些行为只需生成新的中介者子类即可。
缺点:
- 在具体中介者中包含了大量同事之间的交互细节,可能会导致具体中介者类非常复杂,使系统难以维护。
四、适用环境
- 系统中对象之间存在复杂的引用关系,系统结构混论且难以理解;
- 一个对象由于引用了其他很多对象并且直接和这些对象通信,导致难以复用该对象。
五、小结
本章为大家详细的介绍了仓颉设计模式中中介者模式的内容,下一章,为大家带来中介者模式练习题的内容。最后,创作不易,如果大家觉得我的文章对学习仓颉设计模式有帮助的话,就动动小手,点个免费的赞吧!收到的赞越多,我的创作动力也会越大哦,谢谢大家🌹🌹🌹!!!
更多推荐
所有评论(0)