中介者模式实例与代码分析

目录

前言

一、🌍中介者(Mediator)模式是什么?🌍

二、🌍中介者(Mediator)模式的优缺点🌍

三、🌍中介者(Mediator)模式的结构🌍

四、🌍实例演示🌍

1.🌕实例概述🌕

2.🌕代码演示🌕

3.🌕实验结果🌕

总结


前言

设计模式,又称为软件设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。学习设计模式可以提高程序员的思维能力、编程能力和设计能力,使程序设计更加标准化、代码编制更加工程化,使软件开发效率大大提高,从而缩短软件的开发周期。

一、🌍中介者(Mediator)模式是什么?🌍

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

二、🌍中介者(Mediator)模式的优缺点🌍

优点:

        1)降低了对象之间的耦合性,使得对象易于独立地被复用;

        2)将对象间的一对多关联转变为一对一的关联,提高系统的灵活性,使得系统易于维护和扩展

缺点:

        1)当同事类太多时,中介者的职责将很大,它会变得复杂而庞大,以至于系统难以维护

三、🌍中介者(Mediator)模式的结构🌍

中介者模式包含以下主要角色:

        ⑴ 抽象中介者(Mediator)角色:它是具体中介者的接口,它提供了同事对象注册转发同事对象信息的抽象方法。

        ⑵ 具体中介者(ConcreteMediator)角色:实现中介者接口,定义一个List来管理同事对象协调各个同事角色之间的交互关系,因此它依赖于同事角色。

        ⑶ 抽象同事类(Colleague)角色:定义同事类的接口,保存中介者对象,提供同事对象交互的抽象方法,实现所有相互影响的同事类的公共功能。

        ⑷ 具体同事类(ConcreteColleague)角色:是抽象同事类的实现者,当需要与其他同事对象交互时,由中介者对象负责后续的交互。

四、🌍实例演示🌍

1.🌕实例概述🌕

抽象中介者角色:

        SoftwareSystem类,软件系统,定义系统开发的方法。

具体中介者角色:

        campusManageSystem类,校园管理系统开发,依赖于抽象同事类,定义抽象同事类的数组用于管理具体同事类。

抽象同事角色:

        Empolyee类,互联网职员,定义职员的方法,定义抽象终结者角色成员。

具体同事角色:

        DemandAnalysisEployee类,OpenEployee类,TestEployee类···(需求测试人员、系统开发人员、软件测试人···),实现继承的方法

2.🌕代码演示🌕

话不多说,代码附上!

package mediator;

import java.util.ArrayList;
import java.util.List;

public class Mediator {
	public static void main(String[] args) {

		SoftwareSystem system = new campusManageSystem();
		Empolyee o_employee, t_employee, da_employee;
		o_employee = new OpenEployee("张三");
		t_employee = new TestEployee("李四");
		da_employee = new DemandAnalysisEployee("王五");
		system.rigister(o_employee);
		system.rigister(t_employee);
		system.rigister(da_employee);
		system.putMessage("-----校园管理系统开发开始部署-----");

		system.getMessage(o_employee.send("需求太多,不能开发"), o_employee);
		system.putMessage("需求太多,不能开发", t_employee);
	}
}

//抽象中介者:软件系统
interface SoftwareSystem {
	// 注册
	public void rigister(Empolyee e);

	// 得到系统中具体同事角色的消息
	public void getMessage(String msg, Empolyee employee);

	// 向系统中所有角色发送信息
	public void putMessage(String msg);

	// 向系统中指定的角色发送信息
	public void putMessage(String msg, Empolyee employee);
}

//具体中介者:校园管理系统开发
class campusManageSystem implements SoftwareSystem {
	// 用于管理具体同事类角色
	private List<Empolyee> members = new ArrayList<Empolyee>();

	@Override
	public void rigister(Empolyee e) {
		// TODO Auto-generated method stub
		if (!members.contains(e)) {
			members.add(e);
			e.setSoftwareSystem(this);
		}
	}

	@Override
	public void putMessage(String msg, Empolyee employee) {
		// TODO Auto-generated method stub
		employee.receive(msg);
	}

	@Override
	public void putMessage(String msg) {
		// TODO Auto-generated method stub
		for (Empolyee ob : this.members) {
			ob.receive(msg);
		}
	}

	@Override
	public void getMessage(String msg, Empolyee employee) {
		// TODO Auto-generated method stub
		System.out.println(employee.name + "发送信息:" + msg);
	}

}

//抽象同事类:职员
abstract class Empolyee {
	// 用于在注册过程中,用于给职员回复是否注册成功或查询职员是否存在于系统中
	protected SoftwareSystem softwareSystem;
	String name;

	// 由系统发送给职员接受信息
	abstract void receive(String msg);

	// 职员向系统发送信息
	abstract String send(String msg);

	// 设置职员进入的系统
	public void setSoftwareSystem(SoftwareSystem softwareSystem) {
		this.softwareSystem = softwareSystem;
		System.out.println("【注册成功】" + name + ",欢迎您加入!");
	}

}

//具体同事类:需求测试人员
class DemandAnalysisEployee extends Empolyee {

	public DemandAnalysisEployee(String name) {
		super();
		this.name = "【需求】" + name;
		// TODO Auto-generated constructor stub
	}

	@Override
	void receive(String msg) {
		// TODO Auto-generated method stub
		System.out.println(name + "接受到信息:" + msg);
	}

	@Override
	String send(String msg) {
		// TODO Auto-generated method stub
		return msg;
	}

}

//具体同事类:系统开发人员
class OpenEployee extends Empolyee {
	public OpenEployee(String name) {
		super();
		this.name = "【开发】" + name;
		// TODO Auto-generated constructor stub
	}

	@Override
	void receive(String msg) {
		// TODO Auto-generated method stub
		System.out.println(name + "接受到信息:" + msg);
	}

	@Override
	String send(String msg) {
		// TODO Auto-generated method stub
		return msg;
	}

}

//具体同事类:软件测试人员
class TestEployee extends Empolyee {
	public TestEployee(String name) {
		super();
		this.name = "【测试】" + name;
		// TODO Auto-generated constructor stub
	}

	@Override
	void receive(String msg) {
		// TODO Auto-generated method stub
		System.out.println(name + "接受到信息:" + msg);
	}

	@Override
	String send(String msg) {
		// TODO Auto-generated method stub
		return msg;
	}

}

3.🌕实验结果🌕

【注册成功】【开发】张三,欢迎您加入!
【注册成功】【测试】李四,欢迎您加入!
【注册成功】【需求】王五,欢迎您加入!
【开发】张三接受到信息:-----校园管理系统开发开始部署-----
【测试】李四接受到信息:-----校园管理系统开发开始部署-----
【需求】王五接受到信息:-----校园管理系统开发开始部署-----
【开发】张三发送信息:需求太多,不能开发
【测试】李四接受到信息:需求太多,不能开发

总结

        以上就是今天要讲的内容,本文仅仅简单介绍了行为模式下中介者模式的定义,优缺点以及其的模式结构,并通过实例演示,进一步反应了在一定需求条件下,中介模式的优点。
 

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值