我学会了,中介者模式

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

前言

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

中介者模式

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

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

}
目录
相关文章
|
1月前
行为型 中介者模式
行为型 中介者模式
24 0
|
1月前
|
设计模式 Java 数据库连接
聊聊Java设计模式-中介者模式
中介者(Mediator)模式指定义了一个单独的中介对象,来封装一组对象之间的交互。即将这组对象之间的交互委派给中介对象,从而来避免对象之间的直接交互。
57 1
|
10月前
|
设计模式 Java
设计模式-行为型模式:中介者模式
设计模式-行为型模式:中介者模式
|
设计模式 Java
Java设计模式-中介者模式(Mediator)
Java设计模式-中介者模式(Mediator)
|
设计模式 Java
Java设计模式——中介者模式
Java设计模式——中介者模式
106 0
Java设计模式——中介者模式
|
设计模式 Java
Java设计模式 ->中介者模式
Java设计模式 ->中介者模式
85 0
|
前端开发 调度
|
设计模式 Java
Java设计模式-中介者模式
Java设计模式-中介者模式
130 0
Java设计模式-中介者模式
中介者模式与解释器模式(1)
中介者模式与解释器模式(1)
118 0
中介者模式与解释器模式(1)