中介者(Mediator)模式的定义:定义一个中介对象来封装一系列对象之间的交互,使原有对象之间的耦合松散,且可以独立地改变它们之间的交互。中介者模式又叫调停模式,它是迪米特法则的典型应用。
中介者模式将原本多个对象直接的相互依赖变成了中介者和多个同事类的依赖关系。当同事类越多时,中介者就会越臃肿,变得复杂且难以维护。
中介者模式实现的关键是找出“中介者”,下面对它的结构和实现进行分析。
/**
* @descript 这是一个中介者类
* 作用1 注册同事类
* 作用2 负责同事类之前的转发工作
* @author 79197
*/
public interface Intermediary01 {
public void register(Colleague01 colleague);
public void transmit(Colleague01 colleague);
}
public class Intermediary01Implement implements Intermediary01{
private List colleagueObj=new ArrayList();
//注册同事类
public void register(Colleague01 colleague) {
if(!colleagueObj.contains(colleague)) {
colleague.setIntermediary01(this);
colleagueObj.add(colleague);
}
}
//转发
public void transmit(Colleague01 colleague) {
for(Colleague01 obj:colleagueObj) {
if(!obj.equals(colleague) && !obj.typeobString.equals(colleague.typeobString)) {
obj.receive(colleague.send());
}
}
}
}
/**
* @descript 这是一个同事类
* 作用1 定义不同各类,方便区分同事类
* 作用2 聚合中介者类
* 作用3 定义和其它同事类交互的类,即发送消息的类
* 作用4 定义接收其它同事类
* @author 79197
*/
abstract class Colleague01 {
protected Intermediary01 intermediary01;
String typeobString;
String nameString;
String sendStringparameter;
public String getSendStringparameter() {
return sendStringparameter;
}
public void setSendStringparameter(String sendStringparameter) {
this.sendStringparameter = sendStringparameter;
}
public Colleague01(String typeobStringparameter,String nameStringparameter) {
typeobString=typeobStringparameter;
nameString=nameStringparameter;
}
public void setIntermediary01(Intermediary01 intermediary01temp) {
this.intermediary01=intermediary01temp;
}
public abstract String send();
public abstract void receive(String sendcontext);
}
public class Colleague01A extends Colleague01{
public Colleague01A(String typeobStringparameter,String nameStringparameter) {
super(typeobStringparameter, nameStringparameter);
}
String sendStringparameter;
public String getSendStringparameter() {
return sendStringparameter;
}
public void setSendStringparameter(String sendStringparameter) {
this.sendStringparameter = sendStringparameter;
}
@Override
public String send() {
System.out.println("我是"+super.typeobString+"方,昵称是:"+super.nameString+"Colleague01B:发送信息是:"+getSendStringparameter());
return "我是"+super.typeobString+"方,昵称是:"+super.nameString+"Colleague01A:发送信息是:"+getSendStringparameter();
}
@Override
public void receive(String sendcontext) {
System.out.println("我是"+this.typeobString+"方,昵称是:"+this.nameString+"Colleague01A:接口信息是:"+sendcontext);
}
}
public class Colleague01B extends Colleague01{
public Colleague01B(String typeobStringparameter,String nameStringparameter) {
super(typeobStringparameter, nameStringparameter);
}
String sendStringparameter;
public String getSendStringparameter() {
return sendStringparameter;
}
public void setSendStringparameter(String sendStringparameter) {
this.sendStringparameter = sendStringparameter;
}
@Override
public String send() {
System.out.println("我是"+super.typeobString+"方,昵称是:"+super.nameString+"Colleague01B:发送信息是:"+getSendStringparameter());
return "我是"+super.typeobString+"方,昵称是:"+super.nameString+"Colleague01B:发送信息是:"+getSendStringparameter();
}
@Override
public void receive(String sendcontext) {
System.out.println("我是"+super.typeobString+"方,昵称是:"+super.nameString+"Colleague01B:接口信息是:"+sendcontext);
}
}
public class Colleague01C extends Colleague01{
public Colleague01C(String typeobStringparameter,String nameStringparameter) {
super(typeobStringparameter, nameStringparameter);
}
String sendStringparameter;
public String getSendStringparameter() {
return sendStringparameter;
}
public void setSendStringparameter(String sendStringparameter) {
this.sendStringparameter = sendStringparameter;
}
@Override
public String send() {
System.out.println("我是"+super.typeobString+"方,昵称是:"+super.nameString+"Colleague01B:发送信息是:"+getSendStringparameter());
return "我是"+super.typeobString+"方,昵称是:"+super.nameString+"Colleague01A:发送信息是:"+getSendStringparameter();
}
@Override
public void receive(String sendcontext) {
System.out.println("我是"+super.typeobString+"方,昵称是:"+super.nameString+"Colleague01A:接口信息是:"+sendcontext);
}
}
public class IntermediaryTest {
public static void main(String[] args) {
Colleague01 sellerObj=new Colleague01A("链家卖方","小明");
//sellerObj.setSendStringparameter("长安街有一套上好的房源,正规3室一厅,感兴趣的朋友可以私聊......");
Colleague01 buyerObj1=new Colleague01B("业主","小张");
Colleague01 buyerObj2=new Colleague01C("业主","小李");
buyerObj1.setSendStringparameter("想购买一套房子");
Intermediary01 mediaryObj=new Intermediary01Implement();
mediaryObj.register(sellerObj);
mediaryObj.register(buyerObj1);
mediaryObj.register(buyerObj2);
mediaryObj.transmit(buyerObj1);
}
}
/**
* @descript 这是一个中介者类
* 作用1 注册同事类
* 作用2 负责同事类之前的转发工作
* @author 79197
*/
abstract class Intermediary01 {
abstract void register(Colleague01 colleague);
abstract void transmit(Colleague01 colleague);
}
public class Intermediary01Implement extends Intermediary01{
private List colleagueObj=new ArrayList();
//注册同事类
public void register(Colleague01 colleague) {
if(!colleagueObj.contains(colleague)) {
colleague.setIntermediary01(this);
colleagueObj.add(colleague);
}
}
//转发
public void transmit(Colleague01 colleague) {
for(Colleague01 obj:colleagueObj) {
if(!obj.equals(colleague) && !obj.typeobString.equals(colleague.typeobString)) {
obj.receive(colleague.send());
}
}
}
}
页面更新:2024-04-19
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号