行为型模式-中介模式

Posted vbirdbest

tags:

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

定义


中介模式又叫调停模式,顶一个一个中介模式来封装一些列对象之间的交互,使原有对象之间的耦合松散,且可以独立的改变他们之间的交互。

案例

中介就是中转,就是一个传话筒。

/**
 * 抽象同事类
 */
public abstract class Person 
    protected String name;
    protected Mediator mediator;

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

/**
 *  租房者(具体同事角色类)
 */
public class Tenant extends Person 
    public Tenant(String name, Mediator mediator) 
        super(name, mediator);
    

    /**
     * 和中介联系(沟通):发送请求
     */
    public void constract(String message) 
        mediator.constract(message, this);
    

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


/**
 * 房主(具体的同事角色类)
 */
public class HouseOwner extends Person 
    public HouseOwner(String name, Mediator mediator) 
        super(name, mediator);
    

    /**
     * 和中介联系(沟通):发送请求
     */
    public void constract(String message) 
        mediator.constract(message, this);
    

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

/**
 * 抽象中介者
 */
public abstract class Mediator 

    public abstract void constract(String message, Person person);



/**
 * 具体的中介者角色类
 */
public class MediatorStructure extends Mediator 
    private HouseOwner houseOwner;
    private Tenant tenant;

    @Override
    public void constract(String message, Person person) 
        if (person == houseOwner) 
            tenant.getMessage(message);
         else 
            houseOwner.getMessage(message);
        
    

    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 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.constract("我要租两室一厅");
        // 房主将信息通过中介转交给租房者
        houseOwner.constract("我这里有三室一厅的,你要租吗?");
    

  • 租房者和房主都持有中介对象。
  • 中介对象同时持有租房者和房主对象。
  • 中介提供中转方法。

优缺点

优点:

  • 松散耦合
  • 集中控制交互
  • 一对多关联转变为一对一的关联

缺点:
当同事类太多时,中介者的责任将很大,它会变的复杂而庞大,以至于系统难以维护。

使用场景

  • 系统中对象之间存在复杂的引用关系,系统结构混乱且难以理解。
  • 当想创建衣蛾运行与多个类之间的对象,又不想生成新的子类时。

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

手撸golang 行为型设计模式 中介者模式

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

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

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

行为型模式-中介模式

行为型模式-中介模式