动手写一个中介者模式(Java版)实现房子出售和业主买房信息需求

模式的定义与特点

中介者(Mediator)模式的定义:定义一个中介对象来封装一系列对象之间的交互,使原有对象之间的耦合松散,且可以独立地改变它们之间的交互。中介者模式又叫调停模式,它是迪米特法则的典型应用。

主要优点如下

  1. 类之间各司其职,符合迪米特法则。
  2. 降低了对象之间的耦合性,使得对象易于独立地被复用。
  3. 将对象间的一对多关联转变为一对一的关联,提高系统的灵活性,使得系统易于维护和扩展。

主要缺点是

中介者模式将原本多个对象直接的相互依赖变成了中介者和多个同事类的依赖关系。当同事类越多时,中介者就会越臃肿,变得复杂且难以维护。

模式的结构与实现

中介者模式实现的关键是找出“中介者”,下面对它的结构和实现进行分析。

1. 模式的结构

  1. 抽象中介者(Mediator)角色:它是中介者的接口,提供了同事对象注册与转发同事对象信息的抽象方法。
  2. 具体中介者(Concrete Mediator)角色:实现中介者接口,定义一个 List 来管理同事对象,协调各个同事角色之间的交互关系,因此它依赖于同事角色。
  3. 抽象同事类(Colleague)角色:定义同事类的接口,保存中介者对象,提供同事对象交互的抽象方法,实现所有相互影响的同事类的公共功能。
  4. 具体同事类(Concrete Colleague)角色:是抽象同事类的实现者,当需要与其他同事对象交互时,由中介者对象负责后续的交互。
动手写一个中介者模式(Java版)实现房子出售和业主买房信息需求

动手写一个中介者模式(Java版)实现房子出售和业主买房信息需求


示例1,使用interface接口实现方式

/**
 * @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);
		
	}

}

示例2 抽象类的实现方式

/**
 * @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

标签:中介   模式   信息   抽象   业主   昵称   接口   同事   定义   对象   房子   作用   需求

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号

Top