中介者模式核心

如果一个系统中对象之间的联系呈现为网状结构,对象之间存在大量多对多关系,将导致关系极为复杂,这些对象称为“同事对象”。

我们可以引入一个“中介者对象”,使各个“同事对象”只跟“中介者对象”打交道,将复杂的网络结构化解为简单的星形结构。



中介者模式的本质

解耦多个同事对象之间的交互关系。每个对象都持有中介者对象的引用,只跟中介者对象打交道。我们通过中介者对象统一管理这些交互关系。









同事类接口:IDepartment.java

package 设计模式.中介者模式.同事类;

/**
* 同事类的接口
*
* @author 陈霓清
*/
public interface IDepartment {
/**
* 做本部门的事情
*/
void selfAction();

/**
* 向总经理发出申请
*/
void outAction();
}


开发部:Development.java

package 设计模式.中介者模式.同事类;

import 设计模式.中介者模式.Mediator;

/**
* 开发部
*
* @author 陈霓清
*/
public class Development implements IDepartment {

private Mediator mediator; // 持有中介者(总经理)的引用

public Development(Mediator mediator) {
this.mediator = mediator;
mediator.register("development", this);
}

@Override
public void outAction() {
System.out.println("汇报工作!没钱了,需要资金支持!");
}

@Override
public void selfAction() {
System.out.println("专心开发项目!");
}

}


财务部:Finacial.java

package 设计模式.中介者模式.同事类;

import 设计模式.中介者模式.Mediator;

/**
* 财务部
*
* @author 陈霓清
*/
public class Finacial implements IDepartment {

private Mediator mediator; // 持有中介者(总经理)的引用

public Finacial(Mediator mediator) {
this.mediator = mediator;
mediator.register("finacial", this);
}

@Override
public void outAction() {
System.out.println("汇报工作!没钱了,钱太多了!怎么花?");
}

@Override
public void selfAction() {
System.out.println("数钱!");
}

}


市场部:Market.java

package 设计模式.中介者模式.同事类;

import 设计模式.中介者模式.Mediator;

/**
* 市场部
*
* @author 陈霓清
*/
public class Market implements IDepartment {

private Mediator mediator; // 持有中介者(总经理)的引用

public Market(Mediator mediator) {
this.mediator = mediator;
mediator.register("market", this);
}

@Override
public void outAction() {
System.out.println("汇报工作!项目承接的进度,需要资金支持!");

mediator.command("finacial");
}

@Override
public void selfAction() {
System.out.println("跑去接项目!");
}

}


中介者接口:IMediator.java

package 设计模式.中介者模式;

import 设计模式.中介者模式.同事类.IDepartment;

/**
* 中介者接口
*
* @author 陈霓清
*/
public interface IMediator {

void register(String dname, IDepartment iDepartment);

void command(String dname);

}


总经理:GeneralManager.java

package 设计模式.中介者模式;

import java.util.HashMap;
import java.util.Map;

import 设计模式.中介者模式.同事类.IDepartment;

/**
* 总经理
*
* @author 陈霓清
*/
public class GeneralManager implements IMediator {

private Map<String, IDepartment> map = new HashMap<String , IDepartment>();

@Override
public void command(String dname) {
map.get(dname).selfAction();
}

@Override
public void register(String dname, IDepartment department) {
map.put(dname, department);
}

}


客户端调用:Client.java

package 设计模式.中介者模式;

import 设计模式.中介者模式.同事类.Development;
import 设计模式.中介者模式.同事类.Finacial;
import 设计模式.中介者模式.同事类.Market;

public class Client {

public static void main(String[] args) {
IMediator mediator = new GeneralManager();

Market market = new Market(mediator);
Development devp = new Development(mediator);
Finacial f = new Finacial(mediator);

market.selfAction();
market.outAction();

}
}


回到顶部