中介者模式

中介者模式的定义:用一个中介对象封装一系列的对象交互,中介者使各对象不需要显示的相互作用,从而使其耦合松散,而且可以独立的改变他们的交互。

 

中介者模式有很广泛的应用,比如在MVC框架中,C就是一个中介者,他来协调V和M的调用,减少View和Model层得交互,在很多优秀的开源框架中都有很好的体现。

 

Mediator :抽象中介者角色 它定义统一的接口,用户各个同事角色之间的通信

 

Concrete Mediator :具体中介者角色  它是中介者角色通过协调各同事角色实现协作行为,因此它必须依赖于各个同事角色。

 

Colleague :同事角色  每一个同事角色都必须知道中介者角色,并且在和其他的同事进行通信的时候一定要通过中介者角色,每个同事类的行为分为两种,一种是同事本身的行为,比如改变对象本身的状态。第二种是必须依赖中介者才能完成的行为,叫做依赖方法。

 

在计算机的世界里有一个很重要的思想,就是中介的思想,比如在两个事物之间之间联系变得很困难的时候就会想到增加一个中间件,中介者模式也是这样,当两者同事联系变得复杂的时候就增加一个中介者。

计算机网络中的早期的集线器不就是这样的吗?一个星型的链接让通信变得简单很多。

 

员工类

package com.gengu.中介者;

/**
 * 定义通用员工类
 * */
public abstract class Staff {

	/**
	 * 每一个员工是必须要有一个中介者给它服务的
	 */
	protected Mediator mediator;
	
	public Staff(Mediator mediator){
		this.mediator = mediator;
	}
	//自己做自己的事
	public abstract void doSomeThing();
	//寻求帮助
	public abstract void AskForHelp();
	//帮助
	public abstract void HelpOther();
}

员工A 和员工B

package com.gengu.中介者;

public class ColleagueA extends Staff{

	public ColleagueA(Mediator mediator) {
		super(mediator);
	}
	
	//定义一些自己的工作
	public void doSomeThing(){
		System.out.println("I am working");
	}
	
	//定义一个依赖方法
	public void AskForHelp(){
		mediator.BhellpA();
		//System.out.println("I am A,I am asking for help");
	}
	
	//再定义一个方法
	public void HelpOther(){
		mediator.AhellpB();
	}

}


package com.gengu.中介者;

public class ColleagueB extends Staff{

	public ColleagueB(Mediator mediator) {
		super(mediator);
	}
	
	//定义一些自己的工作
	public void doSomeThing(){
		System.out.println("I am working");
	}
	
	//定义一个依赖方法
	public void AskForHelp(){
		super.mediator.AhellpB();
	}

	@Override
	public void HelpOther() {
		super.mediator.BhellpA();
	}

}

 抽象中介者

package com.gengu.中介者;

/**
 * 中介者抽象类
 * */
public abstract class Mediator {

	protected ColleagueA staffA = null;
	protected ColleagueB staffB = null;
	
	public ColleagueA getStaffA() {
		return staffA;
	}
	public void setStaffA(ColleagueA staffA) {
		this.staffA = staffA;
	}
	public ColleagueB getStaffB() {
		return staffB;
	}
	public void setStaffB(ColleagueB staffB) {
		this.staffB = staffB;
	}
	
	public abstract void AhellpB();
	public abstract void BhellpA();
	
}

 实体中介者

package com.gengu.中介者;

public class ConcreteMediator extends Mediator{

	@Override
	public void AhellpB() {
		//staffA.HelpOther();
		System.out.println("A is helping B");
	}

	@Override
	public void BhellpA() {
		System.out.println("B is helping A");
		//staffB.HelpOther();
	}

}

 

就是把本来他们直接交互的那种关系加一个中介,这样可以让复杂的关系调用变得简单起来。

 

基于bert实现关系三元组抽取python源码+数据集+项目说明.zip基于bert实现关系三元组抽取python源码+数据集+项目说明.zip基于bert实现关系三元组抽取python源码+数据集+项目说明.zip基于bert实现关系三元组抽取python源码+数据集+项目说明.zip基于bert实现关系三元组抽取python源码+数据集+项目说明.zip 个人大四的毕业设计、课程设计、作业、经导师指导并认可通过的高分设计项目,评审平均分达96.5分。主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者,也可作为课程设计、期末大作业。 [资源说明] 不懂运行,下载完可以私聊问,可远程教学 该资源内项目源码是个人的毕设或者课设、作业,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96.5分,放心下载使用! 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),供学习参考。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值