目录

一、中介者模式

二、实现

三、优缺点

四、适用环境

五、小结


一、中介者模式

中介者模式:定义一个对象来封装一系列对象的交互。中介者模式使各对象之间不需要显示地相互引用,从而使其耦合松散,而用户可以独立地改变它们之间地交互(行为型)。

中介者角色:

  • 抽象中介者:定义一个接口,用于与各个同事对象之间进行通信;
  • 具体中介者:协调各个同事对象来实现协作行为,维持了对各个同时对象地引用;
  • 抽象同事类:定义各个同事类共有地方法,维持一个抽象中介者类地引用;
  • 具体同事类:每一个同事类对象在需要和其他同事对象通信时先于中介者通信,通过中介者间接与其他同事类地通信。

二、实现

在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
}

三、优缺点

优点:

  • 中介者模式简化了对象之间地交互,用中介者和同事一对多交互代替了同事之间的多对多交互;
  • 可以减少子类生成,中介者将原本分布多个对象间的行为集中一起,改变这些行为只需生成新的中介者子类即可。

缺点:

  • 在具体中介者中包含了大量同事之间的交互细节,可能会导致具体中介者类非常复杂,使系统难以维护。

四、适用环境

  • 系统中对象之间存在复杂的引用关系,系统结构混论且难以理解;
  • 一个对象由于引用了其他很多对象并且直接和这些对象通信,导致难以复用该对象。

五、小结

本章为大家详细的介绍了仓颉设计模式中中介者模式的内容,下一章,为大家带来中介者模式练习题的内容。最后,创作不易,如果大家觉得我的文章对学习仓颉设计模式有帮助的话,就动动小手,点个免费的赞吧!收到的赞越多,我的创作动力也会越大哦,谢谢大家🌹🌹🌹!!!

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐