1.中介模式的定义是什么?
答:中介者模式(Mediator Mode)就是用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
2.中介模式需要注意的什么?
答:由于中介模式是对同事类进行了解耦,若不明确各个类的职责,那么就不要进行使用,而且粒度一定要合适,不能滥用。
3.中继模式举例并实现代码?
答:该例子举例链家网作为房屋交易中介的例子,连接买家卖家。
package com.eill.vigny.purchaser.service.impl;
import java.util.ArrayList;
import java.util.List;
/**
* @Author: 张小乙
* @Date: 2019/1/20 21:21
* @Version: 1.0
* @Description: 1.0
*/
public class LianjiaMediatorTest {
public static abstract class AbstractBuyer{
private int houseIndex;
public AbstractBuyer(int houseIndex){
this.houseIndex = houseIndex;
}
public int getHouseIndex(){
return houseIndex;
}
public abstract void buyHouse();
}
public static class Buyer extends AbstractBuyer{
public Buyer(int houseIndex) {
super(houseIndex);
}
@Override
public void buyHouse(){
System.out.println("李四(买方):我要买第" + getHouseIndex() + "套房子!");
}
}
public static abstract class HouseMediator{
List<AbstractSeller> sellers = new ArrayList<>();
public void addSeller(AbstractSeller seller){
sellers.add(seller);
}
public abstract void tuoguanHouse(AbstractSeller seller);
public abstract void operate(AbstractBuyer buyer);
}
public static class LianjiaMediator extends HouseMediator{
@Override
public void tuoguanHouse(AbstractSeller seller) {
addSeller(seller);
}
@Override
public void operate(AbstractBuyer buyer) {
for(AbstractSeller seller : sellers){
if(seller.getHouseIndex() == buyer.getHouseIndex()){
System.out.println("链家:达成协议");
}
}
}
}
public static abstract class AbstractSeller{
private int houseIndex;
public AbstractSeller(int houseIndex){
this.houseIndex = houseIndex;
}
public int getHouseIndex() {
return houseIndex;
}
public abstract void sellHouse();
}
public static class Seller extends AbstractSeller{
public Seller(int houseIndex) {
super(1);
}
@Override
public void sellHouse(){
System.out.println("张三(卖方):我要出售第" + getHouseIndex() + "套房子!");
}
}
public static void main(String[] args){
LianjiaMediator mediator = new LianjiaMediator();
System.out.println("链家:我是中介");
AbstractSeller seller = new Seller(1);
seller.sellHouse();
mediator.addSeller(seller);
AbstractBuyer buyer = new Buyer(1);
buyer.buyHouse();
mediator.operate(buyer);
}
}