目录
前言
设计模式,又称为软件设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。学习设计模式可以提高程序员的思维能力、编程能力和设计能力,使程序设计更加标准化、代码编制更加工程化,使软件开发效率大大提高,从而缩短软件的开发周期。
一、🌍中介者(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.🌕实验结果🌕
【注册成功】【开发】张三,欢迎您加入!
【注册成功】【测试】李四,欢迎您加入!
【注册成功】【需求】王五,欢迎您加入!
【开发】张三接受到信息:-----校园管理系统开发开始部署-----
【测试】李四接受到信息:-----校园管理系统开发开始部署-----
【需求】王五接受到信息:-----校园管理系统开发开始部署-----
【开发】张三发送信息:需求太多,不能开发
【测试】李四接受到信息:需求太多,不能开发
总结
以上就是今天要讲的内容,本文仅仅简单介绍了行为模式下中介者模式的定义,优缺点以及其的模式结构,并通过实例演示,进一步反应了在一定需求条件下,中介模式的优点。