java 设计模式 中介者模式 让互相调用的模块之间解耦合
java 设计模式 中介者模式 让互相调用的模块之间解耦合
用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
中介者模式的角色和职责
1、Mediator:中介者类的抽象父类
抽象中介者角色定义统一的接口,用于各角色(男和女)之间的通信。
2、ConcreteMediator:具体中介者角色
具体中介者角色,通过协调各角色(男和女)实现协作行为,因此它必须依赖于各个角色。
3、Colleague:关联类的抽象父类
每一个角色都知道中介者角色,而且与其它的角色通信的时候,一定要通过中介者角色来协作。
每个类(Person)的行为分为二种(男和女):一种是男女本身的行为,这种行为叫做自发行为(Self-Method);第二种是必须依赖中介者才能完成的行为,叫做依赖行为(Dep-Method)。
4、concreteColleague:具体的关联类(Man和Woman)。
package com.designpattern;
public class MediatorPatternDemo {
public static void main(String[] args) {
Mediator Mediator = new Mediator();
ModuleA moduleA = new ModuleA(Mediator);
ModuleB ModuleB = new ModuleB(Mediator);
ModuleC ModuleC = new ModuleC(Mediator);
moduleA.execute();
ModuleB.execute();
ModuleC.execute();
}
public static class Mediator {
private ModuleA moduleA;
private ModuleB ModuleB;
private ModuleC ModuleC;
public ModuleA getModuleA() {
return moduleA;
}
public void setModuleA(ModuleA moduleA) {
this.moduleA = moduleA;
}
public MediatorPatternDemo.ModuleB getModuleB() {
return ModuleB;
}
public void setModuleB(MediatorPatternDemo.ModuleB moduleB) {
ModuleB = moduleB;
}
public MediatorPatternDemo.ModuleC getModuleC() {
return ModuleC;
}
public void setModuleC(MediatorPatternDemo.ModuleC moduleC) {
ModuleC = moduleC;
}
public void moduleAInvoke() {
ModuleB.execute("模块A通知中介者");
ModuleC.execute("模块A通知中介者");
}
public void moduleBInvoke() {
moduleA.execute("模块B通知中介者");
ModuleC.execute("模块B通知中介者");
}
public void moduleCInvoke() {
moduleA.execute("模块C通知中介者");
ModuleB.execute("模块C通知中介者");
}
}
public static class ModuleA {
private Mediator mediator;
public ModuleA(Mediator mediator) {
this.mediator = mediator;
this.mediator.setModuleA(this);
}
public void execute() {
mediator.moduleAInvoke();
}
public void execute(String str) {
System.out.println(str + "在调用模块A的功能");
}
}
public static class ModuleB {
private Mediator mediator;
public ModuleB(Mediator mediator) {
this.mediator = mediator;
this.mediator.setModuleB(this);
}
public void execute() {
mediator.moduleBInvoke();
}
public void execute(String str) {
System.out.println(str + "在调用模块B的功能");
}
}
public static class ModuleC {
private Mediator mediator;
public ModuleC(Mediator mediator) {
this.mediator = mediator;
this.mediator.setModuleC(this);
}
public void execute() {
mediator.moduleCInvoke();
}
public void execute(String str) {
System.out.println(str + "在调用模块c的功能");
}
}
}
java 设计模式 中介者模式 让互相调用的模块之间解耦合相关教程
Java API练习2
Java API练习2 要求一: 完成一个java application应用程序,通过接收用户通过键盘输入的文本,把每次回车输入的字符串动态加入到Vector类对象中,并显示此Vector类对象中存储的字符串。 要求二: 完成一个 java application应用程序,计算执行十亿次空循环所
java 设计模式 原型模式 自己实现自己的拷贝逻辑
java 设计模式 原型模式 自己实现自己的拷贝逻辑 原型模式,在笔者理解看来就是克隆,当我们在创建第一个对象时,已经给对象赋值完毕,此时我们需要一个当前对象的副本,如果没有原型模式,我们会再次创建一个对象,然后后二次赋值,保证两个对象完全一致,
(Java学习随堂笔记)对象序列化、随机文件读写
(Java学习随堂笔记)对象序列化、随机文件读写 对象序列化 实现对象的读写: ObjectInputStream把对象读入程序 ObjectOutputStream把对象写入磁盘文件 不保存对象的transient和static类型的变量 ObjectOutputStream s = new ObjectOutputStream(new FileOutp
Java有向无权图的单源点最短路径-邻接矩阵和邻接表
Java有向无权图的单源点最短路径-邻接矩阵和邻接表 此文章是随手笔记,写的不好见谅。 无权图的单源点最短路径我这用BFS实现 主要的就是图的实现与BFS的搜索,其它没什么 为了下一步的有向有权图单源点最短路径做基础 1.用邻接矩阵表示图的 import java.util.
在VScode中创建Java项目
在VScode中创建Java项目 在VScode中创建Java项目 1. 配置SDK环境 2.在vscode中下载Java插件 之前使用过idea或者其他IDE编写Java已经下载并配置好了sdk,可以直接跳转到第二步。没有配置过sdk环境的需要先配置sdk。 1. 配置SDK环境 在win10环境下: 下载jdk:
java基础(集合)
java基础(集合) 集合 1.结构 Collection List:集合中元素可重复 ArrayList:顺序存储 Vector:顺序存储 LinkedList:链式存储 Set:集合中元素不可重复 HashSet TreeSet Map HashMap Hashtable Properties 2.常用方法 1.ArrayList和Vector的常用方法 add(Objec
Java用Dijkstra计算有权图单源点最短路径
Java用Dijkstra计算有权图单源点最短路径 随手笔记,做的不好见谅。 DijKstra算法个人理解 每次取出最短路径的顶点 由该点进行扩散,遍历该点的邻接点得到新点 若源点到该点+该点到新点源点到新点,就更新源点到新点的值 添加进该新点进队列下次由它扩散,如
03. 【Java】流程控制
03. 【Java】流程控制 一、Java程序结构 顺序结构、选择结构、循环结构是结构化程序设计的3种基本结构,是各种复杂程序的基本构造单元: 上图中的三种结构分别是顺序结构、选择结构、循环结构。循环结构是指编写完毕的语句按照编写顺序依次被执行;选择结构是