我学会了,中介者模式

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

前言

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

中介者模式

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

理解:这是一种类、对象之间的经典交互方式,将类、对象的行为和使用解耦了。也许你会觉得中介者模式和观察者模式、代理模式有相似的地方,但是中介者模式注重的是将对象与对象之间进行解耦,让对象与对象之间的通信能够通过中间层来处理,这样多对多的关系就能变成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()

}
目录
相关文章
|
编解码 数据可视化
关于DataV大屏分辨率那些事
关于DataV如何选择合适分辨率的问题,实践中经常遇到一些疑惑。故写此文进行澄清,希望能够帮助各位朋友合理的选择适合自己业务场景的分辨率。
2956 0
|
Web App开发 JavaScript 前端开发
Node.js 是一种基于 Chrome V8 引擎的后端开发技术,以其高效、灵活著称。本文将介绍 Node.js 的基础概念
Node.js 是一种基于 Chrome V8 引擎的后端开发技术,以其高效、灵活著称。本文将介绍 Node.js 的基础概念,包括事件驱动、单线程模型和模块系统;探讨其安装配置、核心模块使用、实战应用如搭建 Web 服务器、文件操作及实时通信;分析项目结构与开发流程,讨论其优势与挑战,并通过案例展示 Node.js 在实际项目中的应用,旨在帮助开发者更好地掌握这一强大工具。
572 1
|
存储 Swift 对象存储
OpenStack的 存储服务
【8月更文挑战第23天】
481 13
|
存储 编解码 算法
3D-Genome | TAD调用之TopDom
3D-Genome | TAD调用之TopDom
3D-Genome | TAD调用之TopDom
|
人工智能 运维 监控
容器服务Kubernetes场景下可观测体系生产级最佳实践
阿里云容器服务团队在2024年继续蝉联Gartner亚洲唯一全球领导者象限,其可观测体系是运维的核心能力之一。该体系涵盖重保运维、大规模集群稳定性、业务异常诊断等场景,特别是在AI和GPU场景下提供了全面的观测解决方案。通过Tracing、Metric和Log等技术,阿里云增强了对容器网络、存储及多集群架构的监控能力,帮助客户实现高效运维和成本优化。未来,结合AI助手,将进一步提升问题定位和解决效率,缩短MTTR,助力构建智能运维体系。
|
存储 人工智能 自然语言处理
基于AI的学生视频自动评审系统:技术架构与实现
基于AI的自动化面审系统,旨在提高学生视频作品评审效率,减轻教师负担,确保评审客观公正。系统通过视频上传、处理、分析及反馈生成等模块,运用NLP、语音识别等技术,从语法、流利度、发音三方面智能评估,提供个性化反馈,保障数据安全与隐私。
1029 6
|
JSON 数据可视化 API
玩转数据科学:Python实战分析天气预报变动趋势
【10月更文挑战第1天】随着气候变化对日常生活的影响日益显著,理解和预测天气模式变得越来越重要。本文将引导您如何使用Python来抓取和分析天气预报数据,从而揭示天气变化的趋势。我们将介绍从获取公开气象API的数据到清洗、处理以及可视化整个过程的技术方法。
100 2
|
存储 NoSQL 数据挖掘
MongoDB应用案例
MongoDB应用案例
671 1
|
人工智能 程序员 开发工具
『软件工程1』详解软件是什么
该文章探讨了软件工程的基本概念,包括软件的定义、特征、软件危机的原因及其应对策略等内容。
|
编解码 算法 IDE
Python实现数据加密-解密
Python实现数据加密-解密
468 0

热门文章

最新文章