设计模式(Design pattern)之中介者模式(Mediator Pattern)
摘要:该代码实现了中介者模式,通过中介者(Mediator)协调设备拥有者(Owner)和租赁者(Lessee)之间的通信。中介者抽象类定义核心方法,具体中介类(MediatorReal)维护双方引用并处理消息转发。同事类(Person)作为抽象基类,其子类Owner和Lessee通过中介者进行交互。客户代码演示了租赁场景:租赁者询问设备,拥有者回复报价,所有通信都通过中介者完成。该设计有效解耦了
·
中介者模式,实现「中介者」与「对象」之间的关系变成单一对话。
中介者抽象类
/**
* 中介者模式 - 中介者抽象类
* @version 0.1
* @author BaiJing.biz
*/
public abstract class Mediator {
public abstract void contact(String msg , Person person);
}
中介者实例
/**
* 中介者模式 - 中介者具体类
* @version 0.1
* @author BaiJing.biz
*/
public class MediatorReal extends Mediator {
private Owner owner;
private Lessee lessee;
public Owner getOwner() {
return owner;
}
public void setOwner(Owner owner) {
this.owner = owner;
}
public Lessee getLessee() {
return lessee;
}
public void setLessee(Lessee lessee) {
this.lessee = lessee;
}
@Override
public void contact(String msg, Person person) {
if(person instanceof Lessee){
lessee.getMessage(msg);
}
if (person instanceof Owner) {
owner.getMessage(msg);
}
}
}
同事抽象类
/**
* 中介者模式 - 抽象同事类
* @version 0.1
* @author BaiJing.biz
*/
public abstract class Person {
// 租赁者或设备放的名字 —— 同事名字
protected String name;
protected Mediator mediator;
public Person(String name, Mediator mediator) {
this.name = name;
this.mediator = mediator;
}
}
设备拥有者
/**
* 中介者模式 - 具体同事类
* @version 0.1
* @author BaiJing.biz
*/
public class Owner extends Person{
public Owner(String name, Mediator mediator) {
super(name, mediator);
}
// 和中介沟通的方法
public void contact(String msg){
mediator.contact(msg,this);
}
// 获取信息
public void getMessage(String msg){
System.out.println("设备拥有者" + name + "信息:" + msg);
}
}
设备租赁者
/**
* 中介者模式 - 具体同事类
* @version 0.1
* @author BaiJing.biz
*/
public class Lessee extends Person{
public Lessee(String name, Mediator mediator) {
super(name, mediator);
}
// 和中介沟通的方法
public void contact(String msg){
mediator.contact(msg,this);
}
// 获取信息
public void getMessage(String msg){
System.out.println("设备租赁者" + name + "信息:" + msg);
}
}
客户
public class CustomerRun {
public static void main(String[] args) {
MediatorReal mediatorReal = new MediatorReal();
Owner owner = new Owner("Tom",mediatorReal);
Lessee lessee = new Lessee("天水",mediatorReal);
// 中介者和设备拥有者与租赁者的关系
mediatorReal.setOwner(owner);
mediatorReal.setLessee(lessee);
lessee.contact("有挖掘机出租吗 ?");
owner.contact("单台挖掘机,3000元/天。");
}
}
更多推荐



所有评论(0)