设计模式 行为型模式 -- 中介者模式
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 适用场景
以上是关于设计模式 行为型模式 -- 中介者模式的主要内容,如果未能解决你的问题,请参考以下文章
设计模式(30)-----行为型模式-----中介者设计模式