1 中介者模式通过定义一个中介的方式解耦两个对象之间互相的调用。
中介抽象类:
public abstract class AbstractAgency {
protected List<AbstractColleague> lstColleague = new ArrayList<AbstractColleague>();
/**
* 消息处理方法
*
* @param messgae
* 消息
* @param colleague
* 发送方
*/
protected abstract void sendMessage(AbstractColleague colleague,
String messgae);
/**
* 添加可发送同事
*
* @param colleague
*/
protected void addListColleague(AbstractColleague colleague) {
lstColleague.add(colleague);
}
}
具体实现类:
public class ConcreteAgency extends AbstractAgency {
/**
* 具体来执行发送请求
*
* @param colleague
* 发送方
* @param messgae
* 消息
*/
@Override
protected void sendMessage(AbstractColleague colleague, String message) {
for (AbstractColleague abstractColleague : lstColleague) {
System.out.println(abstractColleague.getClass().getName());
if (abstractColleague != colleague) {
abstractColleague.receiveMessage(message);
}
}
}
}
同事抽象类:
public abstract class AbstractColleague {
protected AbstractAgency mediator;
public AbstractColleague(AbstractAgency mediator) {
super();
this.mediator = mediator;
}
/**
* 接收消息
*
* @param message
*/
protected abstract void receiveMessage(String message);
/**
* 发送消息
*
* @param message
*/
protected abstract void sendMessage(String message);
}
实现类:
public class ConcreteColleague01 extends AbstractColleague {
public ConcreteColleague01(AbstractAgency mediator) {
super(mediator);
}
@Override
protected void receiveMessage(String message) {
System.out.println("Colleague01收到消息:"+message);
}
@Override
protected void sendMessage(String message) {
//交给中介去发送給指定的人
mediator.sendMessage(this, message);
}
}
public class ConcreteColleague02 extends AbstractColleague {
public ConcreteColleague02(AbstractAgency mediator) {
super(mediator);
}
/**
* 接收消息
*/
public void receiveMessage(String message) {
System.out.println("Colleague02收到消息:" + message);
}
@Override
protected void sendMessage(String message) {
System.out.println("Colleague02发送消息:" + message);
mediator.sendMessage(this, message);
}
}
测试:
public class TextMain {
public static void main(String[] args) {
AbstractAgency agency = new ConcreteAgency();
AbstractColleague colleague01 = new ConcreteColleague01(agency);
AbstractColleague colleague02 = new ConcreteColleague02(agency);
// 添加要发送的同事
agency.addListColleague(colleague01);
agency.addListColleague(colleague02);
//发送
colleague01.sendMessage("hello");
}
}
常考《大话设计模式》