设计模式 行为型模式 -- 中介者模式

Posted CodeJiao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式 行为型模式 -- 中介者模式相关的知识,希望对你有一定的参考价值。

1. 中介者模式


1.1 引入



1.2 分析




1.3 定义



1.4 结构

中介者模式包含以下主要角色:



1.4.1 典型的抽象中介者类代码


1.4.2 典型的具体中介者类代码


1.4.3 典型的抽象同事类代码


1.4.4 典型的具体同事类代码


1.5 【例】租房

现在租房基本都是通过房屋中介,房主将房屋托管给房屋中介,而租房者从房屋中介获取房屋信息。房屋中介充当租房者与房屋所有者之间的中介者。

Mediator.java

package com.tian.mediator;

/**
 * @version v1.0
 * @ClassName: Mediator
 * @Description: 抽象中介者类
 */
public abstract class Mediator {
    public abstract void constact(String message, Person person);
}

MediatorStructure.java

package com.tian.mediator;

/**
 * @version v1.0
 * @ClassName: MediatorStructure
 * @Description: 具体的中介者角色类
 */
public class MediatorStructure extends Mediator {

    //聚合房主和租房者对象
    private HouseOwner houseOwner;
    private Tenant tenant;

    public HouseOwner getHouseOwner() {
        return houseOwner;
    }

    public void setHouseOwner(HouseOwner houseOwner) {
        this.houseOwner = houseOwner;
    }

    public Tenant getTenant() {
        return tenant;
    }

    public void setTenant(Tenant tenant) {
        this.tenant = tenant;
    }

    public void constact(String message, Person person) {
        if (person == houseOwner) {
            tenant.getMessage(message);
        } else {
            houseOwner.getMessage(message);
        }
    }
}

Person.java

package com.tian.mediator;

/**
 * @version v1.0
 * @ClassName: Person
 * @Description: 抽象同事类
 */
public abstract class Person {
    protected String name;
    protected Mediator mediator;

    public Person(String name, Mediator mediator) {
        this.name = name;
        this.mediator = mediator;
    }
}

Tenant.java

package com.tian.mediator;

/**
 * @version v1.0
 * @ClassName: Tenant
 * @Description: 具体的同事角色类: 租房者
 */
public class Tenant extends Person {
    public Tenant(String name, Mediator mediator) {
        super(name, mediator);
    }

    //和中介联系(沟通)
    public void constact(String message) {
        mediator.constact(message, this);
    }

    //获取信息
    public void getMessage(String message) {
        System.out.println("租房者" + name + "获取到的信息是:" + message);
    }
}

HouseOwner.java

package com.tian.mediator;

/**
 * @version v1.0
 * @ClassName: HouseOwner
 * @Description: 具体的同事角色类:房主
 */
public class HouseOwner extends Person {

    public HouseOwner(String name, Mediator mediator) {
        super(name, mediator);
    }

    //和中介联系(沟通)
    public void constact(String message) {
        mediator.constact(message, this);
    }

    //获取信息
    public void getMessage(String message) {
        System.out.println("房主" + name + "获取到的信息是:" + message);
    }
}

Client.java

package com.tian.mediator;

/**
 * @version v1.0
 * @ClassName: Client
 * @Description: 客户端类:测试类
 */
public class Client {
    public static void main(String[] args) {
        //创建中介者对象
        MediatorStructure mediator = new MediatorStructure();

        //创建租房者对象
        Tenant tenant = new Tenant("李四", mediator);
        //创建房主对象
        HouseOwner houseOwner = new HouseOwner("张三", mediator);

        //中介者要知道具体的房主和租房者
        mediator.setTenant(tenant);
        mediator.setHouseOwner(houseOwner);

        tenant.constact("我要租三室的房子!!!");
        houseOwner.constact("我这里有三室的房子,你要租吗?");
    }
}

1.5.1 运行结果:


1.6 优缺点分析 适用场景


1.6.1 优点


1.6.2 缺点


1.6.3 适用场景



以上是关于设计模式 行为型模式 -- 中介者模式的主要内容,如果未能解决你的问题,请参考以下文章

Python 设计模式 — 行为型模式 — 中介者模式

Python 设计模式 — 行为型模式 — 中介者模式

设计模式(30)-----行为型模式-----中介者设计模式

设计模式 行为型模式 实例 -- 中介者模式实例:一对多聊天

行为型模式:中介者模式

JAVA SCRIPT设计模式--行为型--设计模式之Mediator中介者模式(17)