java设计模式之中介者

时间:2021-09-10
本文章向大家介绍java设计模式之中介者,主要包括java设计模式之中介者使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

中介者设计模式大家都不模式,中介也很好理解,我们生活中也会碰到,比如房产中介之类的。

那么今天我们以房产中介和客户的例子来理解下中介者模式

一、中介者实现

首先,我们定义一个中介接口,他主要负责在客户之间传递消息

public interface Mediator {
    void send(Person src,  String message);
}

房产租赁市场上的人,有想租房的,也有往外租房的。他们互相是不认识的,也没有对方的联系方式,所有他们只能跟中介打交道

public abstract class Person {
    protected Mediator mediator;

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

    public abstract void send(String message);

    public abstract void accept(String message) ;
}

实际中介的实现,他有买方和卖方的所有信息,我们这里只有一个买方和卖方,实际中应该是多对多的:

public class HouseAgency implements Mediator {

    private Person buyer;

    private Person seller;

    public void setBuyer(Person buyer) {
        this.buyer = buyer;
    }

    public void setSeller(Person seller) {
        this.seller = seller;
    }

    @Override
    public void send(Person src,  String message) {
        System.out.println(src + " send:"+message );
        if (src.equals(buyer)) {
            seller.accept(message);
        }else{
            buyer.accept(message);
        }
    }
}

真正的买方

public class Buyer extends Person {

    public Buyer(HouseAgency houseAgency) {
        super(houseAgency);
    }

    public void send(String message) {
        mediator.send(this, message);
    }

    public void accept(String message) {
        System.out.println(this.toString() + " accept:" + message);
    }

    @Override
    public String toString() {
        return "Buyer";
    }
}

卖方:

public class Seller extends Person {
    public Seller(HouseAgency houseAgency) {
        super(houseAgency);
    }

    public void send(String message) {
        mediator.send(this, message);
    }

    public void accept(String message) {
        System.out.println(this.toString() + " accept:" + message);
    }

    @Override
    public String toString() {
        return "Seller";
    }
}

买方和卖方通过中介者联系。所以他们都有中介的信息。

我们实现一次交流,卖方和买方都没有对方的信息,但他们通过中介实现了成功交易。

public class TestMain {
    public static void main(String[] args) {
        HouseAgency mediator = new HouseAgency();
        Buyer buyer = new Buyer(mediator);
        Seller seller = new Seller(mediator);
        mediator.setBuyer(buyer);
        mediator.setSeller(seller);
        buyer.send("I like this house!");
        seller.send("I can rent it to you!");
    }
}

输出:

Buyer send:I like this house!
Seller accept:I like this house!
Seller send:I can rent it to you!
Buyer accept:I can rent it to you!

二、中介者应用场景

中介者在商品或者服务的交易市场最常出现,也叫经纪人。

因为大部分情况下,买东西的人不知道谁可以卖东西给他,卖东西的人不清楚谁需要我的商品。

这个时候就需要一个中介存在,这么理解那么JD、TB其实都算是中介。

1. 何时使用

  • 多个类相互耦合,形成网状结构时

2. 方法

  • 将网状结构分离为星型结构

3. 优点

  • 减少类间依赖,降低了耦合
  • 符合迪米特原则

4. 缺点

  • 中介者会膨胀的很大,而且逻辑复杂

5. 使用场景

  • 系统中对象之间存在比较复杂的引用关系
  • 想通过一个中间类来封装多个类的行为,而又不想生成太多的子类

原文地址:https://www.cnblogs.com/wangbin2188/p/15250546.html