我学会了,中介者模式

简介: 中介者模式属于行为型模式,这个类型的设计模式总结出了 类、对象之间的经典交互方式,将类、对象的行为和使用解耦了,花式的去使用对象的行为来完成特定场景下的功能。

前言

中介者模式属于行为型模式,这个类型的设计模式总结出了 类、对象之间的经典交互方式,将类、对象的行为和使用解耦了,花式的去使用对象的行为来完成特定场景下的功能。

中介者模式

使用场景:当遇到多对多关系时,可以考虑使用中介者模式,它可以将多对多的关系梳理成一对一的关系,避免了对象于对象之间的直接关联,中介者模式很好用,通过一个中间层就能实现对象与对象之间的直接通信。

理解:这是一种类、对象之间的经典交互方式,将类、对象的行为和使用解耦了。也许你会觉得中介者模式和观察者模式、代理模式有相似的地方,但是中介者模式注重的是将对象与对象之间进行解耦,让对象与对象之间的通信能够通过中间层来处理,这样多对多的关系就能变成1:1:1的关系了。观察者用于处理 1:n这样的关系,也可以优化成n:n这样的关系,它更注重通信的分发处理。代理模式用于将目标隐藏,然后所有操作都通过代理来实现,它注重的是操作的统一和隔离,只有代理类的对象才能真正操作目标。这样一比较 中介者和代理模式很像嘞,但是它们的含义不同噢,从语义上分析,中介者的对象们都是对外开放的,而代理模式的目标对象是不对外开放的,中介者简化关系,代理模式简化操作。

namespace action_mode_11 {

    interface IMediator {

        buy(user1: Tenant, user2: HouseOwner): void
        sell(user1: HouseOwner, user2: Tenant): void
    }

    class Tenant {

        name: string
        typeName: string = '租客'
        mediator: IMediator

        constructor(name: string, mediator: IMediator) {
            this.name = name
            this.mediator = mediator
        }

        buy(user: HouseOwner) {
            this.mediator.buy(this, user)
        }

    }

    class HouseOwner {

        name: string
        typeName: string = '房东'
        mediator: IMediator

        constructor(name: string, mediator: IMediator) {
            this.name = name
            this.mediator = mediator
        }

        sell(user: Tenant) {
            this.mediator.sell(this, user)
        }
    }

    class Mediator implements IMediator {

        buy(user1: Tenant, user2: HouseOwner): void {
            console.log(`${user1.name}(${user1.typeName}):我要租房子`)
            console.log(`${user2.name}(${user2.typeName}):我要出租房子`)
        }
        sell(user1: HouseOwner, user2: Tenant): void {
            console.log(`${user1.name}(${user1.typeName}):我要出租房子`)
            console.log(`${user2.name}(${user2.typeName}):我要租房子`)
        }
    }

    const mediator = new Mediator()

    const tenant1 = new Tenant('小明', mediator)
    const houseOwner = new HouseOwner('老王', mediator)

    tenant1.buy(houseOwner)
    houseOwner.sell(tenant1)

}

像观察者模式的中介者模式

理解:这样的中介者模式是否像是观察者,但是并不是哟,它是个中介者,房东通过中介者告诉所有租客,租客通过中介者告诉所有房东。而观察者模式是目标发生变化,所有观察者才会发生相应的变化,这是两种不同的含义。

namespace action_mode_11_2 {

    interface IMediator {
        tenantList: Array<Tenant>
        houseOwnerList: Array<HouseOwner>

        buy(user1: Tenant): void
        sell(user1: HouseOwner): void
    }

    class Tenant {

        name: string
        typeName: string = '租客'
        mediator: IMediator

        constructor(name: string, mediator: IMediator) {
            this.name = name
            this.mediator = mediator
            this.mediator.tenantList.push(this)
        }

        buy() {
            this.mediator.buy(this)
        }

    }

    class HouseOwner {

        name: string
        typeName: string = '房东'
        mediator: IMediator

        constructor(name: string, mediator: IMediator) {
            this.name = name
            this.mediator = mediator
            this.mediator.houseOwnerList.push(this)
        }

        sell() {
            this.mediator.sell(this)
        }
    }

    class Mediator implements IMediator {

        tenantList: Array<Tenant> = new Array()
        houseOwnerList: Array<HouseOwner> = new Array()

        buy(user1: Tenant): void {

            console.log(`${user1.name}(${user1.typeName}):我要租房子`)
            this.houseOwnerList.forEach(houseOwner => {
                console.log(`${houseOwner.name}(${houseOwner.typeName}):我要出租房子`)
            })

        }
        sell(user1: HouseOwner): void {

            console.log(`${user1.name}(${user1.typeName}):我要出租房子`)
            this.tenantList.forEach(tenant => {
                console.log(`${tenant.name}(${tenant.typeName}):我要租房子`)
            })
        }
    }

    const mediator = new Mediator()

    const tenant1 = new Tenant('小明', mediator)
    const tenant2 = new Tenant('小黄', mediator)
    const tenant3 = new Tenant('大正', mediator)
    const houseOwner1 = new HouseOwner('老王头', mediator)
    const houseOwner2 = new HouseOwner('老李头', mediator)
    const houseOwner3 = new HouseOwner('老张头', mediator)

    tenant1.buy()
    houseOwner1.sell()

}
目录
相关文章
|
边缘计算 JSON 物联网
解锁业务灵活性:RuleGo规则引擎的高效解耦与实时响应秘籍
RuleGo是一个基于Go语言的轻量级、高性能规则引擎,旨在通过动态规则链和组件化设计,简化复杂系统的业务逻辑管理和实时响应。
解锁业务灵活性:RuleGo规则引擎的高效解耦与实时响应秘籍
|
网络协议 网络安全 数据安全/隐私保护
windocs连接麒麟桌面---vnc软件
windocs连接麒麟桌面---vnc软件
373 0
|
监控 物联网 区块链
新技术趋势与应用:新兴技术的发展前景与实践探索
【5月更文挑战第25天】在21世纪的科技浪潮中,新兴技术如区块链、物联网、虚拟现实等正以前所未有的速度发展,引领着全球的创新潮流。这些技术不仅改变了我们的生活方式,也正在重塑着社会的运行模式。本文将深入探讨这些新兴技术的发展趋势和应用场景,以及它们如何影响我们的生活和社会。
|
机器学习/深度学习 数据可视化 数据挖掘
【python】双十一美妆数据分析可视化 [聚类分析/线性回归/支持向量机](代码+报告)【独一无二】
【python】双十一美妆数据分析可视化 [聚类分析/线性回归/支持向量机](代码+报告)【独一无二】
|
机器学习/深度学习 自然语言处理 搜索推荐
推荐系统的算法分类和操作流程介绍
推荐系统的算法分类和操作流程介绍
|
Web App开发 iOS开发
无法安装此 app, 因为无法验证其完整性 ,解决方案
无法安装此 app, 因为无法验证其完整性 ,解决方案
实战分享之springboot+easypoi快速业务集成1
实战分享之springboot+easypoi快速业务集成1
|
机器学习/深度学习 算法 物联网
《风控要略:互联网业务反欺诈之路》一万字读后详细总结
本书的内容正如书名所述,是为要略而非攻略,即作者站在一个更为宏观的角度,以自身的从业经验对当今风控领域做了一番较为全貌的总结概述。书中的章节内容有精有简,既为要略,那么就无法苛求其内容都足够全面与详细。它更像是一部风控领域的科普类简述作品,在广度上能较好地让读者了解到风控各方面的现状及走向,但若要谈及深度,则多少有种“师父领进门,修行在个人”的感觉。这本书其实有挺多人推荐,一方面是书籍出版时间距离现在很近,一方面则是填补风控业务领域入门书籍的空白,只是通篇读完,好的地方是有,值得吐槽的地方也不少。总而言之,对于像我这样风控小白而言,还是值得翻阅一番。
333 0
|
SQL 存储 分布式计算
数据仓库性能测试方法论与工具集
数据仓库是数据库的下一代产品形态 —— 如何对数字化转型过程中涌现的数据集合进行有效的存储、分析和利用,继而帮忙企业进行运营决策优化甚至创造出新的获客模式和商业模式形成竞争力,是企业主们亟需解决的问题。在数据价值爆发的时代背景中,数据仓库在千行百业中都有着相应的应用场景。
707 0