17、MEDIATOR(中介模式)

目的

用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变他们之间的交互。

使用场景

  • 一组对象以定的工艺良好但是复杂的方式进行通信。产生的相互依赖关系结构混乱且难以理解
  • 一个对象那个引用其他很多对象并且直接与这些对象通信,倒置难以服用该对象
  • 想定制一个分布在多个类中的行为,但是又不想生成太多的子类

具体例子

在我们的生活中,我们和中介有很多接触。中介就是和很多人之间进行通信,这样的话很多个不认识的人能够通过中介就能进行交流,图片示意如下:


1.jpg

在这个情况下只有四个主要的类,他们分别是Mediator抽象中介者,ConcreteMediator中介者实体类和Colleague抽象同事类和ConcreteColleague实体同事类。同事类并不需要认识对方,只需要认识中介类就好了。中介类负责和每一个同事类之间通信。

代码例子如下:

package mediator;

/**
 * 租客和房东的抽象类
 */
public abstract class Person {
    protected String name;
    protected  Mediator mediator;
    Person(String name, Mediator mediator){
        this.name = name;
        this.mediator = mediator;
    }
}

package mediator;

/**
 * 房东类
 */
public class HouseOwner extends Person {
    HouseOwner(String name,Mediator mediator){
        super(name,mediator);
    }
    public void constact(String message){
        mediator.constract(message,this);
    }
    public void getMessage(String message){
        System.out.println("房主"+name+",获得信息"+message);
    }
}

package mediator;

/**
 * 租客类
 */
public class Tenant extends Person {
    Tenant(String name,Mediator mediator){
        super(name,mediator);
    }
    public void contact(String message){
        mediator.constract(message,this);
    }
    public void getMessage(String message){
        System.out.println("租房者"+name+";获得信息:"+message);
    }
}


package mediator;

/**
 * 中介接口
 */
public interface Mediator {
    void constract(String message,Person person);
}



package mediator;

/**
 * 具体中介类
 */
public class ContractMediator implements Mediator {
    private HouseOwner houseOwner;
    private Tenant tenant;

    public HouseOwner getHouseOwner(){
        return houseOwner;
    }
    public Tenant getTenant(){
        return tenant;
    }

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

    public void setTenant(Tenant tenant) {
        this.tenant = tenant;
    }
    public void constract(String message,Person person){
        if(person == houseOwner){
            tenant.getMessage(message);
        }else{
            houseOwner.getMessage(message);
        }
    }
}


package mediator;

import iterator.ConcreteList;

public class Client {
    public static void main(String[] args) {
        ContractMediator mediator = new ContractMediator();
        HouseOwner houseOwner = new HouseOwner("房东",mediator);
        Tenant tenant = new Tenant("租客",mediator);

        mediator.setHouseOwner(houseOwner);
        mediator.setTenant(tenant);

        houseOwner.getMessage("我有房要租");
        tenant.getMessage("我要租房");
    }



}

你可能感兴趣的:(17、MEDIATOR(中介模式))